如何将COM对象类型转换为Excel.Checkbox类型

时间:2012-01-28 15:40:47

标签: c# office-interop excel-interop comobject

我正在为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";

1 个答案:

答案 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");
}