2010-11-24 6 views
1

J'ai utilisé OOXML api pour mettre à jour la partie xml personnalisée dans un fichier .docx. Le code met à jour la partie xml personnalisée dans le document. Mon problème est que le même code remplace et génère .docx parfait quand je l'utilise dans une console App, mais il ne remplace ni ne génère .docx lorsqu'il est utilisé dans l'application ASP.NET. L'extrait de code en question est le suivant:Mise à jour OpenXML customXMLPart

string tmp = string.Format("{0}.docx", Guid.NewGuid()); 
     File.Copy(FileName, tmp); 

     _xml = ReadXML(XmlPath); 
     using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(tmp, true)) { 
      var mainPart = wordDoc.MainDocumentPart; 

      mainPart.DeleteParts<CustomXmlPart>(mainPart.CustomXmlParts); 

      //Add a new customXML part and then add content 
      var customXmlPart = mainPart.AddCustomXmlPart(CustomXmlPartType.CustomXml); 

      //copy the XML into the new part... 
      using (var ts = new StreamWriter(customXmlPart.GetStream())) { 
       ts.Write(_xml); 
       ts.Flush(); 
      } 
     } 

Je suis au carré pourquoi cela se produit-il. Toute aide est appréciée Merci

+0

Utilisez-vous la même version d'OpenXml SDK? Je sais que certaines parties entourant la syntaxe CustomXML ont été modifiées entre les versions. –

Répondre

0

Une meilleure approche est probablement de mettre à jour de manière sélective uniquement la partie XML que vous souhaitez remplacer.

Vérifiez ma réponse here pour fondamentalement la même question.

Je le fais actuellement dans une application MVC après avoir commencé avec le même code dans la console, donc je ne suis pas sûr de ce qui pourrait causer un problème entre console/web.

Il semble également que la signature a changé pour WordProcessingDocument.Open() alors peut-être que l'enregistrement automatique ne fonctionne pas. Aussi, est-il possible qu'une exception soit lancée qui est en quelque sorte avalée par l'appelant? Peut-être lancer un essai/attraper dans l'extérieur using(...){...}.