Можно ли сохранить текстовый документ, минуя методы Save или SaveAs С#

У меня есть надстройка MS Word, которая запускает 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);
    }
}

Однако это не имело значения, диалоговое окно приложения по-прежнему появляется, и независимо от того, нажимаю ли я «ОК» или «Отмена» в диалоговом окне, оно не обрабатывает команду «Сохранить как».

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

Итак, можно ли сохранить текстовый документ, минуя методы «Сохранить» или «Сохранить как»? Есть ли способ обойти это?


person ASindleMouat    schedule 10.01.2018    source источник
comment
FWIW можно захватить некоторые/многие встроенные команды Word, особенно до Backstage, используя макросы с именем встроенной команды: например, Sub FileSaveAs и Sub FileSave. Если что-то подобное было сделано, вы ничего не можете сделать. Рад, что вы нашли способ обойти это :-)   -  person Cindy Meister    schedule 12.01.2018
comment
@ Синди Приятно знать, спасибо!   -  person ASindleMouat    schedule 12.01.2018


Ответы (1)


Разобрался, к счастью, не было строгого требования сохранять его как .doc или .docx, поэтому я выбрал .pdf. Мне удалось обойти приложение, перехватывающее команды сохранения, используя Метод 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);
        }
    }
person ASindleMouat    schedule 12.01.2018