我正在为excel添加一个复选框,我有问题将“System .__ ComObject”类型的COM对象转换为接口类型“Microsoft.Office.Interop.Excel.CheckBox”,任何帮助都将不胜感激!我正在使用visual studio 2008和office 2007处理Web应用程序。错误发生在这一行: - chkBx =(Microsoft.Office.Interop.Excel.CheckBox)obj;
Microsoft.Office.Interop.Excel.OLEObjects objs = (Microsoft.Office.Interop.Excel.OLEObjects)mWSheet1.OLEObjects(System.Reflection.Missing.Value);
Microsoft.Office.Interop.Excel.OLEObject obj = objs.Add("Forms.CheckBox.1",
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
false,
false,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
234,
234,
108,
21);
Microsoft.Office.Interop.Excel.CheckBox chkBx;
chkBx = (Microsoft.Office.Interop.Excel.CheckBox)obj;
chkBx.Value = true;
chkBx.Caption = "xyz";
答案 0 :(得分:0)
在我看来,你无法投射它,因为它根本没有实现该界面。您可以使用System.__ComObject
运算符检查as
是否支持接口而不进行强制转换,从而引发异常,如下所述:HOW TO: Check the Type of a COM Object (System.__ComObject) with Visual C# .NET。
我想知道您是否使用了错误的方法将复选框添加到工作表中。如下所述,Microsoft.Office.Tools.Excel.ControlCollection
不是更常用的方法Adding Controls to Office Documents at Run Time。
如果您使用ControlCollection
,我认为您的代码最终会看起来像这样:
private void AddCheckBox()
{
Worksheet vstoWorksheet = Globals.Factory.GetVstoObject(
this.Application.ActiveWorkbook.Worksheets[1]);
System.Windows.Forms.CheckBox checkbox =
new System.Windows.Forms.CheckBox();
checkbox.Checked = true;
checkbox.Text = "xyz"
vstoWorksheet.Controls.AddControl(234, 234, 108, 21, "checkbox1");
}