比较两个Word文档并跟踪C#

时间:2015-11-17 06:32:03

标签: c# ms-word

我想比较2个单词文档例如我的第一个文档包含文本

“快速的棕色狐狸跳过懒狗”是一个英语pangram-一个包含所有字母表字母的短语。它通常用于触摸打字练习。它还用于测试打字机和计算机键盘,显示字体以及涉及英文字母中所有字母的其他应用程序。它由于其简洁和连贯性而广为人知。

我的第二个文档可能会对单词或句子进行一些更改,例如第二个文档包含这样的文本。

“此文字应突出显示”“快速的棕色狐狸跳过懒狗”是一个英语pangram-一个包含所有字母表字母的短语。它通常用于触摸打字练习。 “此文字应突出显示”它还用于测试打字机和计算机键盘,显示字体以及涉及英文字母中所有字母的其他应用程序。它由于其简洁和连贯性而广为人知。 “此文字应突出显示”

现在我已经改变了第二份文件中的文字,我想在第二份文件中突出显示这些更改而不是第三份文件,因为我正在创建文件版本第一份文件将是第一份文件,第二份文件将是第二份供用户下载的版本。

请帮助我,我想使用 Microsoft.Office.Interop.Word。

2 个答案:

答案 0 :(得分:0)

Word具有比较功能 - 您可以在功能区的“审阅”选项卡中找到它,在右侧,在其自己的组中。这允许您指定两个文档并比较内容。差异显示为“跟踪更改”(审阅),您可以指定在哪个文档中显示它们,或在新文档中显示它们。

在Word应用程序中尝试使用它,如果它能够满足您的需要,可以使用Word.Application.CompareDocuments方法使用“interop”进行比较。

答案 1 :(得分:0)

这对我有用,我希望这对其他人也有帮助。

        string fileToOpen = @"d:\doc1.docx";

        string fileToCompare = @"d:\doc2.docx";

        Application app = new Application();
        object miss = System.Reflection.Missing.Value;
        object readOnly = true;
        object AddToRecent = false;
        object Visible = false;

        var doc = app.Documents.Open(fileToOpen, ref miss, readOnly, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss);

        doc.TrackRevisions = true;
        doc.ShowRevisions = false;
        doc.PrintRevisions = true;

        doc.Compare(fileToCompare, miss, WdCompareTarget.wdCompareTargetCurrent, true, false, false, false, false);

        object SaveToFormat = WdSaveFormat.wdFormatDocumentDefault;
        string outputFileName = @"d:\output.docx";
        doc.SaveAs2(outputFileName, SaveToFormat, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss);

        doc.Close();
        var word = app.Application;
        word.Quit();

        Marshal.ReleaseComObject(doc)
        Marshal.ReleaseComObject(word);
        Marshal.ReleaseComObject(app);
        doc = null;
        word = null;
        app = null;
        GC.Collect();
        GC.WaitForPendingFinalizers();