从Open Xml Document创建Microsoft Word Interop文档

时间:2014-01-02 09:09:10

标签: c# xml openxml office-interop

尝试从打开的xml文件创建互操作应用。我正在使用来自Open Xml SDK的word文件的反映代码。当我试图将Open Xml文档的xml插入到互操作文档

doc.Range().InsertXML(package.MainDocumentPart.Document.OuterXml);

此行抛出System.Runtime.InteropServices.COMException,表示无法将XML插入该位置。

这是完整的代码

public void CreatePackage()
{
  using (MemoryStream mem = new MemoryStream())
  {
    using (WordprocessingDocument package = WordprocessingDocument.Create(mem, WordprocessingDocumentType.Document))
    {
      CreateParts(package);
      Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();
      Microsoft.Office.Interop.Word.Document doc = app.Documents.Add(System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing);
      doc.Range().InsertXML(package.MainDocumentPart.Document.OuterXml);
      doc.Activate();
    }
  }
}

2 个答案:

答案 0 :(得分:1)

你可以这样做:

public void CreatePackage()
{
  using (MemoryStream mem = new MemoryStream())
  {
    using (WordprocessingDocument wordDocument = WordprocessingDocument.Create(mem, WordprocessingDocumentType.Document))
    {
      CreateParts(wordDocument);
      Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();
      Microsoft.Office.Interop.Word.Document doc = app.Documents.Add(System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing);
      XDocument xDoc = OPCHelper.OpcToFlatOpc(wordDocument.Package);
      string openxml = xDoc.ToString();                        
      doc.Range().InsertXML(openxml);
      doc.Activate();
    }
  }
}

获取OPCHelper类的代码您可以从此处Utility to generate Word documents from template获取代码。

更多信息请查看此Transforming Open XML Documents to Flat OPC Format

答案 1 :(得分:0)

我会将OpenXML保存到临时文件并使用interop在Word中打开该文件。但我不知道interop是否应该支持XML,所以我无法回答为什么InsertXML不起作用。我怀疑它并不期望OpenXML类型的XML,而是其他东西。