4

我正在开发一个 Excel 插件并遇到了障碍。

我希望使用 Excel 工作簿中的工作表更新组合框。目前我可以用 foreach 循环来做到这一点。然而,这是有限的,因为它只在我运行它时拾取添加或减去的工作表。我的插件看起来很俗气,带有“刷新表格”按钮,如果可能的话,我想避免这种情况。

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

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

谢谢!

4

2 回答 2

3

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

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

于 2012-10-26T23:55:44.783 回答
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
        }
    }
}

编辑:我在这个 MSDN 站点找到了基本代码。

于 2012-10-27T00:35:54.097 回答