MailMerge:从Excel到Word C#

时间:2018-06-07 08:19:39

标签: c# excel ms-word mailmerge

我目前正面临有关MS Word的MailMerge功能的问题。

我不得不将旧的VBA应用程序重写为C#。我几乎完成了这件事。新应用程序正常工作。 除了一个我无法摆脱的PopUp。 enter image description here

所以我过去2天一直在网上浏览,因为我们的客户不希望弹出,因为旧应用程序中没有。 但是我找不到合适的解决方案。除了少数人提到可能连接字符串不正确。但我发现没有资源告诉我它应该如何看待C#代码

这就是它在旧应用程序中的外观:

TARGET_LINK_LIBRARIES

我显然已尝试使用该连接密钥并在我的代码中使用它。但它并没有阻止弹出。我也试过玩这个子类型。但它要么不改变任何东西,要么抛出格式异常。

这是什么在C#中工作:

Word.ActiveDocument.MailMerge.OpenDataSource Name:=strSourceDoc, ConfirmConversions:=False, _
        ReadOnly:=False, LinkToSource:=True, AddToRecentFiles:=False, PasswordDocument:="", _
        PasswordTemplate:="", WritePasswordDocument:="", WritePasswordTemplate:="", _
        Revert:=False, Format:=wdOpenFormatAuto, Connection:= _
        "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=" & strSourceDoc & ";Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";" _
        , SQLStatement:="SELECT * FROM `Tabelle1$`", SQLStatement1:="", SubType:= _
        wdMergeSubTypeAccess

如何更改连接字符串以防止弹出窗口显示?

1 个答案:

答案 0 :(得分:0)

所以我找到了一个解决方案,它在某种程度上起作用。

实际问题(至少从我测试过的)是文件扩展名而不是连接字符串。我使用的是.xlsx文件,作为我的源文档。但是当我用一些xls文件测试时,弹出窗口消失了。

我刚刚参加了#34;谷歌会议"找出xls和xlsx之间的差异。

所以我可以更改我的代码以仅使用xls文件。问题解决了。但对我来说仍然是一个令人不快的解决方案。

如果你想测试一下,可能会让它与xlsx一起工作。下面是一些要测试的代码(只需在winforms按钮上单击它就可以绑定它)

 class PerformMailMerge
    {
        Word.Application mailApp;
        Object oMissing = System.Reflection.Missing.Value;
        Object oFalse = false;
        string _path = @"Your Path to Excel File";
        string savePath = @"Your Path to Word Document";

        public void mailMerge2()
        {
            mailApp = new Word.Application();
            mailApp.Visible = false;

            mailApp.Documents.Add();

            mailApp.ActiveDocument.MailMerge.MainDocumentType = Word.WdMailMergeMainDocType.wdMailingLabels;

            //OpenDataSource: 
            mailApp.ActiveDocument.MailMerge.OpenDataSource(_path,
                Word.WdOpenFormat.wdOpenFormatAllWordTemplates, true, true, true,
                ref oMissing, ref oMissing, ref oMissing,
                ref oMissing, ref oMissing, ref oMissing, "TABLE Tabelle1$", "SELECT * FROM `Tabelle1$",
                ref oMissing, ref oMissing,
                Word.WdMergeSubType.wdMergeSubTypeWord2000);

            mailApp.ActiveDocument.SaveAs2(savePath);
            mailApp.ActiveDocument.Close();
            mailApp.Quit();
        }    
    }