2012-01-28 156 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

相關問題