我一直在尝试将组合框或任何表单控件添加到动态创建的Excel工作表中。在c#中创建Excel工作簿项目时,我能够将组合框添加到Excel工作表中,并且能够访问文档级别(Sheet1)中的Controls.AddComboBox函数,如下所示: 图1
namespace ExcelWorkbook2{
public partial class Sheet1{
private void Sheet1_Startup(object sender, System.EventArgs e){
Microsoft.Office.Tools.Excel.Controls.ComboBox comboBox1
=this.Controls.AddComboBox(this.Range["A1", "A1"], "comboBox1");
comboBox1.Items.Add("1 Item");
this
指的是sheet1
这段代码在创建工作簿项目时工作正常,但是当我正在创建excel表时,如下所示:
图2
Application xlApp = new Application();
xlApp.Visible = true;
Workbook wb = xlApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
Worksheet ws = (Worksheet)wb.Worksheets[1];
我无法进入WorkSheet(ws)并获得" controls.AddCombobox。"将工作表(图2)放在快速表中说系统.___ Comobject" this"另一个项目中的对象(图1)返回值(ExcelWorkbook2.Sheet1)。我怎样才能到达作为WorkSheetBase的Controls.AddCombobox,以便在c#生成的工作表中使用(图2)。感谢
答案 0 :(得分:0)
Controls.AddCombobox仅适用于Microsoft.Office.Tools.Excel命名空间的Host Items。在您的情况下,Sheet1是在设计时创建的主机项。
在运行时创建的工作表..
...不能包含任何主机控件或 Windows窗体控件。
在运行时在工作表上创建 ComboBox ,以处理C#中的事件并避免使用VBA:
大会参考文献:
Microsoft.Vbe.Interop(Microsoft.Vbe.Interop.dll)
Microsoft.Vbe.Interop.Forms(Microsoft.Vbe.Interop.Forms.dll)
Microsoft.VisualBasic(Microsoft.VisualBasic.dll)
经测试/工作代码:
using MSForms = Microsoft.Vbe.Interop.Forms;
using System.Windows.Forms;
...
// insert object shape
Excel.Shape cbo = ws.Shapes.AddOLEObject("Forms.ComboBox.1", Type.Missing, false, false, Type.Missing, Type.Missing, Type.Missing, 20, 1, 100, 20);
cbo.Name = cboName;
// bind it and wire it up
MSForms.ComboBox comboBox = (Microsoft.Vbe.Interop.Forms.ComboBox)Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateGet(ws, null, cboName, new object[0], null, null, null);
comboBox.FontSize = 10;
comboBox.FontBold = true;
comboBox.Change += new MSForms.MdcComboEvents_ChangeEventHandler(comboBox_Changed);
// samle data
comboBox.AddItem("Stackoverflow");
comboBox.AddItem("Cool devs");
...
private void comboBox_Changed()
{
System.Windows.Forms.MessageBox.Show("Selectiong Changed!");
}
To create a Button on a worksheet at run-time that handles events in C# and avoid VBA
请支持您的投票和评论。谢谢,Leo。