Я пишу надстройку 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.
Ответ 1 · рейтинг 4 · awudoin
Я предполагаю, что вы имеете в виду 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