2010-11-24 8 views
1

Ich habe OOXML API verwendet, um den benutzerdefinierten XML-Teil in einem DOCX zu aktualisieren. Der Code aktualisiert den benutzerdefinierten XML-Teil im Dokument. Mein Problem ist, dass derselbe Code die perfekte .docx-Datei ersetzt und generiert, wenn ich sie in einer Konsolen-App verwende, aber sie ersetzt oder generiert nicht .docx, wenn sie in einer ASP.NET-Anwendung verwendet wird. Das fragliche Code-Snippet ist wie folgt:OpenXML Aktualisierung 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(); 
      } 
     } 

Ich bin am Platz, warum ist das passiert. Jede Hilfe wird geschätzt Danke

+0

Verwenden Sie dieselbe Version von OpenXml SDK? Ich weiß, dass einige Teile um die CustomXML-Syntax zwischen den Versionen geändert wurden. –

Antwort

0

Ein besserer Ansatz ist wahrscheinlich, selektiv nur den XML-Teil zu aktualisieren, den Sie ersetzen möchten.

Überprüfen Sie meine Antwort here auf im Grunde die gleiche Frage.

Ich mache das gerade in einer MVC-App, nachdem ich mit dem gleichen Code in der Konsole begonnen habe, also bin ich mir nicht sicher, was ein Problem zwischen Konsole/Web verursachen könnte/würde.

Es sieht auch so aus, als ob sich die Signatur für WordProcessingDocument.Open() geändert hat, also funktioniert der AutoSave möglicherweise nicht. Ist es auch möglich, dass eine Ausnahme ausgelöst wird, die vom Anrufer verschluckt wird? Vielleicht werfen Sie einen Versuch/fangen in die äußere using(...){...}.