1

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

1 回答 1

0

在我看来,您无法转换它,因为它根本没有实现该接口。您可以通过使用此处描述System.__ComObject的运算符来检查 a 是否支持不强制转换的接口,从而引发异常: HOW TO: Check the Type of a COM Object (System.__ComObject) with Visual C# .NETas

我想知道您是否使用错误的方法将复选框添加到工作表。不是Microsoft.Office.Tools.Excel.ControlCollection这里描述的更常见的方法:在运行时向 Office 文档添加控件

如果您使用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");
}
于 2012-01-28T19:32:55.813 回答