Показать документ MS Word в окне для редактирования - PullRequest
0 голосов
/ 09 ноября 2018

& 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; Спасибо за чтение и ответы

1 Ответ

0 голосов
/ 10 ноября 2018

Вы можете:

  • Получить текущую дату изменения файла
  • Используйте System.Diagnostics.Process для запуска Word.
  • После завершения процесса вы снова проверяете Измененную дату
  • Если пользователь сохранил файл, Дата изменения будет обновлена ​​

Я не знаю, работает ли процесс все еще, если пользователь просто закрывает документ, но не слово. Для этого вы можете наблюдать за папкой документа для ~ ... временных файлов, которые Word создает при открытом документе ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...