2016-10-26 3 views
0

Microsoft Word Interop предлагает Quit событие для обнаружения, когда пользователь закрывает его:Как определить, когда Excel был закрыт (Office Interop)

var word = new Microsoft.Office.Interop.Word.Application(); 
var events = (Microsoft.Office.Interop.Word.ApplicationEvents4_Event)word; 
events.Quit += Word_Quit; 

Есть ли что-то подобное для Microsoft Excel? Я нашел подобный интерфейс, но, к сожалению, нет Quit события:

var excel = new Microsoft.Office.Interop.Excel.Application(); 
var events = (Microsoft.Office.Interop.Excel.AppEvents_Event)excel; 

ответ

0

Это хак, но это работает для моих целей. Просто держите ссылку на документ Excel/Word и периодически пытайтесь получить доступ к простому свойству. Если это не удается, документ, скорее всего, был закрыт:

try 
{ 
    if (this.workbook != null) 
    { 
     var count = this.workbook.Worksheets.Count; 
    } 
    else 
    { 
     var count = this.wordDocument.Content.StoryLength; 
    } 
} 
catch 
{ 
    // Office has been closed 
} 
+0

Это проверяет, открыт ли конкретный файл. Вы можете использовать [WorkbookBeforeClose] (https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.appevents_event.workbookbeforeclose.aspx), чтобы отслеживать это. Но закрытие документа не означает закрытие приложения. – BrakNicku

+0

@BrakNicku WorkbookBeforeЗакрыть пожары, прежде чем пользователь сможет сохранить документ. Таким образом, у нас нет точного момента закрытия документа. – cheeesus

+0

В обработчике событий вы можете отключить стандартный диалог сохранения ('DisplayAlerts = false') и показать свой собственный - таким образом вы можете узнать точное время закрытия документа, но главная проблема заключается в закрытии приложения закрытия <>, поэтому этот ответ не отвечает на вопрос. – BrakNicku