我正在使用Excel插件并遇到障碍。
我希望使用Excel工作簿中的工作表更新组合框。目前我可以使用foreach循环执行此操作。但是,这在某种意义上是有限的,它只会在我运行时选择添加或减少的工作表。我的插件看起来很俗气,有一个“刷新床单”按钮,我想尽可能避免这种情况。
理想情况下,我可以将工作表对象数据绑定到组合框,以便在没有我干预的情况下即时更新。但是,我的研究发现它并不支持这一点。我没有尝试过,因为我直到后来才在我的开发计算机前,但我几乎是积极的,因为它不会继承IList,它不会作为数据源。
有没有人做过类似的事情?我真的很想让这件事工作正常。
谢谢!
答案 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。