如何将 c# 中的两个 docx word 文件与动态程序集进行比较



我使用此代码将两个word文档与ofice单词互选进行比较:

object missing = System.Reflection.Missing.Value;
                    object readonlyobj = false;
                    object filename = FirstDocx;
                    //Call assemblys dynamically
                    dynamic objEApp = Activator.CreateInstance(Type.GetTypeFromProgID("Word.Application"));
                    string strAssemblyOff2007 = "Microsoft.Office.Interop.Word, Version=" + objEApp.Version + ".0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c";
                    Assembly xslWordAssembly = Assembly.Load(strAssemblyOff2007); //Load Assembly
                    Type type = xslWordAssembly.GetTypes().Single(t => t.Name == "ApplicationClass");
                    dynamic app = Activator.CreateInstance(type);
                    //var docs = app.Documents;
                    //
                    //Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();
                    var doc = app.Documents.Open(
                    ref filename, ref missing, ref readonlyobj, ref missing, ref missing,
                    ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
                    string filenm = SecondDocx;
                    string nm = FirstDocx;
                    object filesavename = nm;
                    doc.TrackRevisions = true;
                    doc.ShowRevisions = true;
                    doc.PrintRevisions = true;
                    doc.Compare(filenm);
                    doc.Close(ref missing, ref missing, ref missing);
                    app.Quit(ref missing, ref missing, ref missing);

First & Second Docx 是我的文件。在代码中,我动态加载程序集,但是当我想在var doc = app中打开第一个docx时。文档打开(我收到此错误:

Could not convert argument 0 for call to Open.

我该如何解决?

而不是

var doc = app.Documents.Open(ref filename, ref missing, ref readonlyobj, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);

简单尝试

var doc = app.Documents.Open(@filename);

这是数据类型的问题。当 COM 类型库被分析并转换为 C# 的 (P)IA 时,数据类型必须调整为 C# 理解的内容。C#(最初)不理解可选参数 - 本机它使用重载。因此,VBA 可选参数必须作为对象"通过引用"传递。但必需参数保留数据类型。

参数文件名不是可选的,它键入为字符串。所以你需要:

string filename = FirstDocX;

最新更新