Я работаю над плагином VSTO для Excel 2007, который генерирует исключения COM на клиенте, но не при отладке на моем компьютере разработчика.
Плагин захватывает событие запуска Excel, определяет специальный стиль, а затем добавляет обработчик события в событие SheetChange. Каждый раз, когда значение изменяется на листе, ячейка устанавливается в новый стиль. Все это должно предоставить пользователям способ видеть ячейки, которые они изменили. Код выглядит следующим образом:
private void ThisWorkbook_Startup(object sender, System.EventArgs e)
{
this.BeforeSave += new Microsoft.Office.Interop.Excel.WorkbookEvents_BeforeSaveEventHandler(ThisWorkbook_BeforeSave);
this.SheetChange += new Microsoft.Office.Interop.Excel.WorkbookEvents_SheetChangeEventHandler(ThisWorkbook_SheetChange);
cfStyle = Globals.ThisWorkbook.Styles.Add("CFStyle", missing);
cfStyle.Font.Color = Excel.XlRgbColor.rgbOrange;
cfStyle.Font.Bold = true;
cfStyle.Interior.Color = Excel.XlRgbColor.rgbLightGray;
cfStyle.Interior.TintAndShade = 0.8;
cfStyle.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;
cfStyle.Borders.Weight = Excel.XlBorderWeight.xlThin;
cfStyle.Borders.Color = Excel.XlRgbColor.rgbDarkSlateGray;
cfStyle.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlDiagonalDown].LineStyle = Excel.XlLineStyle.xlLineStyleNone;
cfStyle.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlDiagonalUp].LineStyle = Excel.XlLineStyle.xlLineStyleNone;
}
Когда это работает в dev, это работает отлично. Однако, когда он запускается на клиентском компьютере, я получаю эту информацию об исключении после загрузки плагина VSTO. Интересно, что при первом COM-взаимодействии происходит сбой, в результате чего устанавливается свойство Style.Font.Color.
Вот подробности исключения:
System.Runtime.InteropServices.COMException
(0x800A03EC): исключение из HRESULT:
0x800A03EC
Трассировка стека серверов:
Исключение переброшено в [0]:
в
System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage (Шеззаде
reqMsg, IMessage retMsg)
в
System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (MessageData &
msgData, тип Int32)
в
Microsoft.Office.Interop.Excel.Font.set_Color (Объект
) * * Тысяча двадцать-один
в
TriQuint.DemandPlanning.Workbook.ThisWorkbook.ThisWorkbook_Startup (Объект
отправитель, EventArgs e)
в
Microsoft.Office.Tools.Excel.Workbook.OnStartup ()
в
TriQuint.DemandPlanning.Workbook.ThisWorkbook.FinishInitialization ()
в
Microsoft.VisualStudio.Tools.Office.EntryPointComponentBase.Microsoft.VisualStudio.Tools.Applications.Runtime.IEntryPoint.FinishInitialization ()
в
Microsoft.VisualStudio.Tools.Applications.AddInAdapter.ExecutePhase (ExecutionPhases
executionPhases)
в
Microsoft.VisualStudio.Tools.Applications.AddInAdapter.CompleteInitialization ()
в
Microsoft.VisualStudio.Tools.Office.Internal.OfficeAddInAdapterBase.ExecuteEntryPointsHelper ()
Кто-нибудь когда-нибудь видел что-нибудь подобное? Я сделал довольно много проверок, таких как обеспечение правильных версий .NET, VSTO Interop, Excel 2007 и т. Д. И т. Д.
Заранее спасибо за любой совет!
Jim