& emsp; Здравствуйте, я создаю WPF-приложение для Windows C #, которое взаимодействует с документом Microsoft Office Word (.docx). Приложение должно обновить файл шаблона .docx с помощью пользовательского ввода, и этот шаг успешно выполняется с использованием OpenXML. Другая часть приложения - показать отредактированный текстовый документ пользователю внутри окна приложения или с помощью MS Word и разрешить ему добавить дополнительную информацию, если он этого хочет.
& emsp; Проблема, с которой я столкнулся облицовка это:
Я должен отключить элементы управления своего приложения при открытом документе Word, и я должен включить их после закрытия слова, а также я хочу знать, было ли сохранено слово app (если пользователь внес изменения).
& emsp; Следующий код является событием нажатия кнопки для документа с открытым словом:
using System.Windows;
using Microsoft.Office.Interop.Word;
using Application = Microsoft.Office.Interop.Word.Application;
public class MainWindowViewModel : BaseViewModel
{
...
... some view model initialization
...
public bool AreControlsEnabled { get; set; } = true;
private void OpenWord ()
{
AreControlsEnabled = false;
var app = new Application()
{
Visible = true
};
var doc = app.Documents.Open("pathtofile.docx");
var docClass = app.ActiveDocument as DocumentClass;
docClass.DocumentEvents2_Event_Close += DocClass_DocumentEvents2_Event_Close;
docClass.DocumentEvents_Event_Close += DocClass_DocumentEvents_Event_Close;
app.DocumentBeforeClose += new ApplicationEvents4_DocumentBeforeCloseEventHandler(DocBeforeClose);
app.DocumentBeforeSave += new ApplicationEvents4_DocumentBeforeSaveEventHandler(DocBeforeSave);
}
private void DocClass_DocumentEvents2_Event_Close ()
{
MessageBox.Show("DocClass_DocumentEvents2_Event_Close");
AreControlsEnabled = true;
}
private void DocClass_DocumentEvents_Event_Close ()
{
MessageBox.Show("DocClass_DocumentEvents_Event_Close");
AreControlsEnabled = true;
}
private void DocBeforeClose (Document doc, ref bool cancel)
{
MessageBox.Show("DocBeforeClose");
AreControlsEnabled = true;
}
private void DocBeforeSave (Document doc, ref bool SaveAsUI, ref bool cancel)
{
MessageBox.Show("DocBeforeSave");
AreControlsEnabled = true;
}
}
& emsp; Когда я запускаю код - я вижу открытый документ MS Word, как и ожидалось, но когда я закрываю его или сохраняю - ни одно из событий не запускается, и я не могу понять, почему. Кроме того, я могу использовать System.Diagnostics.Process для запуска Word и добавления к нему события выхода, но таким образом я не могу знать, применил ли пользователь какие-либо изменения. Так что, если кто-то решил эту проблему, помогите мне, пожалуйста.
& emsp; Спасибо за чтение и ответы