使用open xml

时间:2015-08-13 21:17:26

标签: c# ms-word openxml openxml-sdk

我使用OpenXML在C#中生成了Word / docx文档。 使用altChunk添加/合并了其他一个docx文档。 当您打开该文档时,它看起来很棒。但是,我还需要使用C#代码处理该文档。比我看到还有altChunk实际上有指向合并文档的二进制序列化内容的指针。 如果您使用Word - SaveAs并将文档保存到新文件并反映该文档(OpenXML工具或VS扩展名),则会发现Word引擎已将altChunk转换为Paragraph(s)。太棒了。但我无法通过C#代码实现这一目标。

如果我复制到新文件并执行保存,则不会发生任何事情:

    public static void SaveAgain(string masterDocumentPath)
    {
        string newDocumentPath = @"F:\test.docx";
        using (Stream original = new FileStream(masterDocumentPath, FileMode.Open))
        {
            using (FileStream fs = File.Create(newDocumentPath))
            {
                original.CopyTo(fs);
            }
        }

        using (WordprocessingDocument myDocNew =
            WordprocessingDocument.Open(newDocumentPath, true))
        {
            myDocNew.MainDocumentPart.Document.Save();
        }
    }

我在构建代码时使用过这篇文章(How to Use altChunk for Document Assembly)。 我缺少什么?

更新

我已成功使用Interop执行此操作。这是片段:

    public static string SaveAsWithInterop(string masterDocumentPath)
    {
        string directoryPath = Path.GetDirectoryName(masterDocumentPath);
        string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(masterDocumentPath);
        string fileExtension = Path.GetExtension(masterDocumentPath);

        string filenNameToSave = string.Concat(fileNameWithoutExtension, "Saved", fileExtension);
        object savedFilePath = Path.Combine(directoryPath, filenNameToSave);

        Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application();
        object missing = Missing.Value;
        object isReadOnly = false;

        Microsoft.Office.Interop.Word.Document doc = wordApp.Documents.Open(masterDocumentPath);
        doc.SaveAs(ref savedFilePath, ref missing, ref missing, ref missing, ref missing, ref missing, ref isReadOnly, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);

        doc.Close();

        return savedFilePath.ToString();
    }

我仍然想知道,是否可以使用OpenXML执行此操作。我想避开Interop。

0 个答案:

没有答案