C#excel从c#创建工作表获取文档级别

时间:2013-09-05 18:20:08

标签: c# excel controls office-interop comobject

我一直在尝试将组合框或任何表单控件添加到动态创建的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)。感谢

1 个答案:

答案 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。