Можно ли сохранить документ 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);
}
}