Можно ли сохранить документ Word, обходя методы Save или SaveAs C#

У меня есть MS Word AddIn, который запускает winform, которая позволяет пользователю указать некоторые дополнительные метаданные, которые затем сохраняются в виде XML-файла вместе с копией документа в указанном месте.

Все это прекрасно работает при запуске из отдельного документа Word, однако одна из областей, в которой он будет использоваться, - это когда документ Word запускается внутри приложения (EMIS WEB). Он запускает копию Word с локального компьютера, что нормально, так как позволяет запускать надстройку.

Когда я пытаюсь сохранить документ, я получаю Command Failed. ошибка. Файл XML не спасает проблем: xml.Save(path + docName + ".xml");,

Приложение предлагает свой собственный диалог "сохранить".

Диалоговое окно

Сначала я подумал, что это приложение удаляет фокус из документа, поэтому this.Application.ActiveDocument.SaveAs не удалось, потому что это был не активный документ. Поэтому я попытался получить объект Document, когда он был активен, и передать его методу saveDoc, чтобы я мог установить его как активный документ следующим образом:

public void saveDoc(string doc, Word.Document wd)
{
    string path = @"\\servername\folder\subfolder\";
    object filename = path + doc + ".docx";
    try
    {
        wd.Activate();
        this.Application.ActiveDocument.SaveAs(ref filename);
    }
    catch (Exception e)
    {
        MessageBox.Show(e.Message);
    }
}

Однако это не имеет значения, диалоговое окно приложения по-прежнему всплывает, и независимо от того, нажимаю ли я кнопку OK или Отмена в диалоговом окне, оно не обрабатывает команду SaveAs.

Я пришел к выводу, что приложение перехватывает команду Save/SaveAs и вместо этого делает свое дело.

Так можно ли сохранить текстовый документ, минуя методы Save или SaveAs? Есть ли способ обойти это?

1 ответ

Решение

Разобрался, к счастью, не было строгого требования сохранить его как .doc или же .docx поэтому я выбрал .pdf, Я обошел приложение, перехватывая команды Save с помощью метода Document.ExportAsFixedFormat с wdExportFormatPDF чтобы сохранить его в формате PDF.

Таким образом, окончательный код выглядит следующим образом, и это работает удовольствие:

public void saveDoc(string doc)
    {
        string path = @"\\servername\folder\sub-folder\";
        string filename = path + doc + ".pdf";
        try
        {
            this.Application.ActiveDocument.ExportAsFixedFormat(filename, WdExportFormat.wdExportFormatPDF);
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
        }
    }
Другие вопросы по тегам