2012-01-28 153 views
1

我正在添加一个复选框以便于excel,并且我已经将类型为“System .__ ComObject”的COM对象转换为接口类型为'Microsoft.Office.Interop.Excel.CheckBox' , 任何帮助,将不胜感激!我正在使用visual studio 2008和office 2007开发web应用程序。错误发生在这一行: - chkBx =(Microsoft.Office.Interop.Excel.CheckBox)obj;如何将COM对象类型转换为Excel.Checkbox类型

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

它在我看来像你不能施放它,因为它只是没有实现该接口。您可以检查一个System.__ComObject是否支持一个接口而不投射,并因此抛出异常,通过使用as运算符,如下所述:HOW TO: Check the Type of a COM Object (System.__ComObject) with Visual C# .NET

我不知道你是否使用错误的方法将复选框添加到工作表。如下所述,是不是更常见的方法通过Microsoft.Office.Tools.Excel.ControlCollectionAdding 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"); 
} 
+0

嗨马丁,感谢您的回答。我无法引用Microsoft.Office.Tools.Excel命名空间,我发现我需要使用.net framework 3.5 sp1和visual studio 2008 sp1安装VSTO 3.0 sp1。有下载的VSTO的x86版本,但是你知道我在哪里可以找到x64版本? – 2012-01-28 21:40:21

相关问题