将多个docx文件合并为一个

时间:2013-10-20 06:47:53

标签: c# ms-word

我正在使用C#开发桌面应用程序。我编写了一个函数来合并多个docx文件,但它没有按预期工作。我的内容与源文件中的内容完全不同。

之间添加了一些空白行。内容扩展到下一页,页眉和页脚信息丢失,页边距变化等。 如何将文档连接起来并更改它。任何建议都会有所帮助。

这是我的代码。

    public bool CombineDocx(string[] filesToMerge, string destFilepath)
    {
        Application wordApp = null;
        Document wordDoc = null;
        object outputFile = destFilepath;
        object missing = Type.Missing;
        object pageBreak = WdBreakType.wdPageBreak;

        try
        {
            wordApp = new Application { DisplayAlerts = WdAlertLevel.wdAlertsNone, Visible = false };
            wordDoc = wordApp.Documents.Add(ref missing, ref missing, ref missing, ref missing);

            Selection selection = wordApp.Selection;

            foreach (string file in filesToMerge)
            {
                selection.InsertFile(file, ref missing, ref missing, ref missing, ref missing);

                selection.InsertBreak(ref pageBreak);
            }

            wordDoc.SaveAs( ref outputFile, ref missing, ref missing, ref missing, 
                ref missing, ref missing, ref missing, ref missing, 
                ref missing, ref missing, ref missing, ref missing, 
                ref missing, ref missing, ref missing, ref missing);

            return true;
        }
        catch (Exception ex)
        {
            Msg.Log(ex);
            return false;
        }
        finally
        {
            if (wordDoc != null)
            {
                wordDoc.Close();
            }

            if (wordApp != null)
            {
                wordApp.DisplayAlerts = WdAlertLevel.wdAlertsAll;
                wordApp.Quit();
                Marshal.FinalReleaseComObject(wordApp);
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

在我看来,这并不容易。因此,我会在这里给你一些提示。 我认为您需要对代码实施以下更改。

1.而不是pageBreak你需要添加任何可能最合适的分节符:

object sectionBrak = WdBreakType.wdSectionBreakNextPage;
'other section break types also available

并在循环中使用此新变量。 因此,您可以将源文档的所有文本,页脚和标题都添加到新文档中。

2.但是,您仍然需要阅读保证金参数并使用其他代码“手动”将其应用于新文档。因此,您需要打开源文档并以这种方式检查它的边距:

intLM = SourceDocument.Sections(1).PageSetup.LeftMargin;
'...and similar for other margins

接下来你需要将它应用到新文档,到适当的部分:

selection.Sections(1).PageSetup.LeftMargin = intLM;

3.其他一些文档部分可能需要其他一些技术。

答案 1 :(得分:0)

您可以使用Open XML SDK和DocumentBuilder工具。

请参阅Merge multiple word documents into one Open Xml