【问题标题】:Event Handler won't connect to Active Workbook for COM Addin事件处理程序不会连接到 COM 插件的活动工作簿
【发布时间】:2015-01-21 21:40:41
【问题描述】:

我在将 Workbook_SheetChange 事件处理程序连接到活动工作簿时遇到问题。我尝试了几种方法都无济于事,它只是一直说我的工作簿或 Excel (xlApp) 实例为空并引发异常。

代码如下:

private void createProject_Click(object sender, RibbonControlEventArgs e) 
    {
        Excel.Application xlApp;

        xlApp = (Excel.Application)Marshal.GetActiveObject("Excel.Application");

        exwb = (Excel.Workbook)xlApp.ActiveWorkbook;

        MessageBox.Show(exwb.Name);
        EventDel_CellsChange = new Excel.WorkbookEvents_SheetChangeEventHandler(narrator.Workbook_SheetChange);
        xlApp.ActiveWorkbook.SheetChange += EventDel_CellsChange;
    }

问题出在最后一行,请注意我已多次将 xlApp.ActiveWorkbook 替换为 exwb

【问题讨论】:

    标签: c# excel comaddin


    【解决方案1】:

    创建 Excel 应用程序时可能出现了问题。 Marshal.GetActiveObject 不是创建 Excel.Application 实例的最简单方法。试试这个:

    xlApp = new Excel.Application();
    

    【讨论】:

    • 我很抱歉没有澄清,一旦我的功能区按钮被点击,我希望我的代码(事件处理程序)被激活并绑定到活动工作簿的 workbook_sheetchange 事件。所以在这种情况下,我试图抓住 excel 的活动实例,它是活动工作簿。
    • 你为什么要做所有的编组?你不使用 VSTO 吗?
    • “它只是一直说我的工作簿或 Excel (xlApp) 实例为空”虽然听起来像是初始化问题。
    • 抱歉,我是新手,我对 VSTO 有什么选择?有没有更好的方法来获取 excel 的活动实例?是的,这绝对是初始化,因为如果我创建一个新实例、添加一个工作簿并添加一个工作表,它就可以正常工作。
    • 您在运行 VSTO 时拥有该实例。不需要自己编组。真的,它让您的生活更轻松。
    猜你喜欢
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    • 2011-08-14
    • 2010-10-28
    • 1970-01-01
    相关资源
    最近更新 更多