簡體   English   中英

使用DocumentFormat.OpenXml(c#)合並Word文檔

[英]Merging word-documents using DocumentFormat.OpenXml(c#)

考慮到MS Word“ Track Changes”的模式,是否有任何方法可以使用DocumentFormat.OpenXML庫合並兩個Word文檔。 或者也許可以使用另一個庫?

您可以使用MS Word的標准API

    Microsoft.Office.Interop.Word.Document worddoc;
    Microsoft.Office.Interop.Word.Application wordApp;
    Microsoft.Office.Interop.Word.Range _range;              
    object file = "1.doc";
    wordApp = new Microsoft.Office.Interop.Word.Application();
    worddoc = wordApp.Documents.Open(ref file); 
    _range = worddoc.Content;
    Microsoft.Office.Interop.Word.Range rng = _range; 
    rng.Start = rng.End;
    rng.InsertFile("2.doc");

編輯

並閱讀此合並詞文檔

編輯2

所以試試這個

    using DocumentFormat.OpenXml.Packaging;
    using DocumentFormat.OpenXml.Wordprocessing;
    ....
    public byte[] OpenAndCombine(List<string> FileNames)
    {
        List<byte[]> documents = new List<byte[]>();
        foreach (string _FileName in FileNames)               
                documents.Add(File.ReadAllBytes(_FileName));

        MemoryStream mainStream = new MemoryStream();

        mainStream.Write(documents[0], 0, documents[0].Length);
        mainStream.Position = 0;

        int pointer = 1;
        byte[] ret;
            using (WordprocessingDocument mainDocument = WordprocessingDocument.Open(mainStream, true))
            {

                XElement newBody = XElement.Parse(mainDocument.MainDocumentPart.Document.Body.OuterXml);

                for (pointer = 1; pointer < documents.Count; pointer++)
                {
                    WordprocessingDocument tempDocument = WordprocessingDocument.Open(new MemoryStream(documents[pointer]), true);
                    XElement tempBody = XElement.Parse(tempDocument.MainDocumentPart.Document.Body.OuterXml);

                    newBody.Add(tempBody);
                    mainDocument.MainDocumentPart.Document.Body = new Body(newBody.ToString());
                    mainDocument.MainDocumentPart.Document.Save();
                    mainDocument.Package.Flush();
                }
            }
            ret = mainStream.ToArray();
            mainStream.Close();
            mainStream.Dispose();
        return (ret);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM