MailMerge: из Excel в Word C # - PullRequest
       42

MailMerge: из Excel в Word C #

0 голосов
/ 07 июня 2018

В настоящее время я сталкиваюсь с проблемой функциональности MailMerge в MS Word.

Мне пришлось переписать старое приложение VBA в C #.Я практически закончил с этим.Новое приложение работает отлично.За исключением одного всплывающего окна, от которого я не могу избавиться.enter image description here

Таким образом, я искал в Интернете последние 2 дня, потому что наши клиенты не хотят, чтобы это всплыло, как этого не было в старом приложении.,Однако я не мог найти правильное решение для этого.За исключением нескольких человек, отметивших, что, вероятно, строка подключения неверна.Но я не нашел ресурсов, рассказывающих мне, как это должно выглядеть в коде 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

Я, очевидно, уже пытался взять этот ключ подключения ииспользуйте это в моем коде.Но это не мешает этому всплыть.Я также попытался поиграть с подтипом.Но это либо ничего не меняет, либо выдает исключение формата.

Вот что работает в C #:

mailApp.ActiveDocument.MailMerge.OpenDataSource(processedPath + file, true, false, true, 
    true, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, 
   "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=" + 
    processedPath + file + ";Mode=Read;", 
   "SELECT * FROM 'Tabelle1$'", 
   ref oMissing, ref oMissing, ref oMissing,
   Word.WdMergeSubType.wdMergeSubTypeAccess);

Как изменить строку подключения, чтобы не показывать это всплывающее окно?

1 Ответ

0 голосов
/ 08 июня 2018

Итак, я нашел решение, которое как-то работает.

Фактическая проблема (по крайней мере из того, что я тестировал) - расширение файла, а не строка подключения.Я использовал файлы .xlsx, как мои исходные документы.Но как только я протестировал некоторые файлы xls, всплывающее окно исчезло.

Я просто взял «сеанс Google», чтобы выяснить различия между 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();
        }    
    }

РЕДАКТИРОВАТЬ: Так что на случай, если кто-нибудь снова наткнется на это.Я нашел решение проблемы.Решение НЕ указывает WdMergeSubType.Это позволяет читать из файлов xlsx и по-прежнему не отображать всплывающее окно!

...