Application.ActiveWorkbook имеет значение null в надстройке Excel

Я пишу надстройку Excel. Ниже приведен мой код

private void ThisAddInStartup(object sender, EventArgs e)
{
    Excel.Sheets sheets = Application.ActiveWorkbook.Sheets;
    _worksheet = (from Excel.Worksheet sheet in sheets where sheet.Name.Contains(SheetName) select sheet).FirstOrDefault();

    Application.SheetChange += ApplicationSheetChange;
}

Когда я отлаживаю, все работает отлично. Но когда я открываю файл Excel непосредственно с жесткого диска, я получаю Application.ActiveWorkbook как null. Может ли кто-нибудь помочь мне понять это.

Я хочу запустить свою надстройку, как при открытии файла excel. В основном моя надстройка отслеживает изменения в листе книги Excel и выполняет некоторые необходимые действия.

Если это имеет значение, я использую Office 2007, Visual Studio 2012. Я могу запустить решение после изменения файла проекта и замены части Office 14 на 12.


person Sandy    schedule 21.08.2013    source источник


Ответы (1)


Я предполагаю, что вы имеете в виду ThisAddIn_Startup и вместо ThisAddInStartup. Если нет, то это, вероятно, проблема.

Не рекомендуется пытаться получить доступ к документу внутри метода ThisAddin_Startup. Это связано с тем, что в Office не всегда есть готовый документ при запуске этого метода, поэтому вы можете столкнуться с каким-то странным поведением. Вместо этого подключитесь к событию, которое срабатывает, когда пользователь открывает документ, и запустите там свой код. Это должно выглядеть примерно так (Примечание: я не тестировал этот код, но он должен работать):

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    // Hook into the workbook open event
    this.Application.WorkbookOpen += new AppEvents_WorkbookOpenEventHandler(WorkWithWorkbook);
}

private void WorkWithWorkbook(Microsoft.Office.Interop.Excel.Workbook workbook)
{
    // Workbook has been opened. Do stuff here.
}

Ознакомьтесь со статьей MSDN о написании надстроек уровня приложения. Особо обратите внимание на часть, в которой говорится о доступе к документу при запуске приложения.

http://msdn.microsoft.com/en-us/library/vstudio/bb157876.aspx

person awudoin    schedule 21.08.2013
comment
Да, это ThisAddIn_Startup. Resharper заставил меня переименовать метод. Позвольте мне попробовать это, как только я вернусь из офиса. - person Sandy; 22.08.2013
comment
Я попробовал, и событие WorkWithWorkbook не срабатывает во время отладки. Тем не менее, запуск Excel непосредственно с жесткого диска действительно работает. Спасибо. - person Sandy; 22.08.2013