跟踪已添加和删除的工作表

时间:2012-10-26 21:58:49

标签: c# excel vsto com-interop

我正在使用Excel插件并遇到障碍。

我希望使用Excel工作簿中的工作表更新组合框。目前我可以使用foreach循环执行此操作。但是,这在某种意义上是有限的,它只会在我运行时选择添加或减少的工作表。我的插件看起来很俗气,有一个“刷新床单”按钮,我想尽可能避免这种情况。

理想情况下,我可以将工作表对象数据绑定到组合框,以便在没有我干预的情况下即时更新。但是,我的研究发现它并不支持这一点。我没有尝试过,因为我直到后来才在我的开发计算机前,但我几乎是积极的,因为它不会继承IList,它不会作为数据源。

有没有人做过类似的事情?我真的很想让这件事工作正常。

谢谢!

2 个答案:

答案 0 :(得分:3)

Excel.Application对象有一个WorkbookNewSheet事件,在添加新工作表时会触发该事件。不幸的是,它似乎没有在删除工作表时触发的事件。

您可以将组合框更新代码放入组合框的DropDown事件中。它在组合框打开时触发,您的代码可以在列表可见之前更新组合框项目。

答案 1 :(得分:2)

我喜欢WarrenG关于下拉事件的想法。如果这工作似乎是理想的。否则,我建议使用工作簿的Sheet_Activate事件。在创建或删除工作表时会触发此操作,至少在用户完成时会触发。

在C#中,您需要实例化事件并创建处理程序。实际上,您可以在Form_Load事件中执行此操作,以便在实例化表单时创建事件处理程序。您需要设置对Interop.Excel的引用,以便您的Form.cs代码看起来像这样:

因此,您的Form_Load事件看起来像这样:

using Excel = Microsoft.Office.Interop.Excel;

namespace ExcelWorkbook1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Globals.ThisWorkbook.SheetActivate +=
                new Excel.WorkbookEvents_SheetActivateEventHandler(
                ThisWorkbook_SheetActivate);
        }

        private void ThisWorkbook_SheetActivate(object Sh)
        {
            //Fill your combobox here
        }
    }
}

编辑:我找到了基本代码at this MSDN site