сохранить новый результат документа из Word mailmerge в C# - PullRequest
0 голосов
/ 17 января 2020

Я выполняю почтовое слияние с новым документом с помощью Word для Office 365

Я пытаюсь сохранить новый документ в указанном месте. Однако я не знаю, как получить ссылку на этот новый документ, созданный после MailMerge.Execute.

В настоящее время я использую ActiveDocument, но есть другой документ «в пути» (я предположить, что это документ с ошибками), который я должен закрыть в дополнение к исходному документу, который я закрываю до тех пор, пока я не хочу сохранить ActiveDocument.

Существует ли более надежный способ получения ссылки на документ созданный MailMerge.Execute?

  static void Main(string[] args)
    {
        string inDoc = @"C:\bob\doc.docx";
        string data = @"C:\bob\data.csv";
        string outDoc = @"C:\bob\out.docx";

        Application wordApp = new Application();
        Document wordDoc = wordApp.Documents.Open(inDoc);

        wordDoc.MailMerge.OpenDataSource(data);

        wordDoc.MailMerge.Destination = WdMailMergeDestination.wdSendToNewDocument;
        wordDoc.MailMerge.SuppressBlankLines = true;
        wordDoc.MailMerge.Execute(false);

        // Close the input document
        wordDoc.Close(false);

        // Active document is now what?  The error document?
        // Close this too
        wordApp.ActiveDocument.Saved = true;
        wordApp.ActiveDocument.Close(false);

        // Now have reference to the new document
        wordApp.ActiveDocument.SaveAs2(outDoc, WdSaveFormat.wdFormatDocumentDefault);
        wordApp.ActiveDocument.Close(false);

        wordApp.Quit();
    }

1 Ответ

0 голосов
/ 21 января 2020

Существует ли более надежный способ получения ссылки на документ, созданный MailMerge.Execute?

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

Что я хотел бы сделать, это создать массив / список / коллекцию / словарь / независимо от всех открытых в данный момент документов перед выполнением слияния. Затем проверьте, находится ли ActiveDocument в этом «списке». Если нет, у вас есть правильный. Если это так, то l oop коллекция wordApp.Documents пока не найдете коллекцию, которой нет в «списке».

...