2012-01-28 10 views
1

엑셀에 확인란을 추가하고 인터페이스 유형 'Microsoft.Office.Interop.Excel.CheckBox'에 'System .__ ComObject'유형의 COM 개체를 캐스팅 할 때 문제가 발생합니다. , 어떤 도움을 주시면 감사하겠습니다! Visual Studio 2008 및 Office 2007을 사용하는 웹 응용 프로그램에서 작업하고 있습니다.이 줄에서 오류가 발생합니다. - chkBx = (Microsoft.Office.Interop.Excel.CheckBox) obj; 단순히 그 인터페이스를 구현하지 않기 때문에 당신이 캐스팅 할 수처럼COM 개체 유형을 Excel로 캐스팅하는 방법 체크 상자 유형

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.ControlCollection을 통과하는 일반적인 방법은 없습니다 : Adding Controls to Office Documents at Run Time. ,

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

안녕 마틴 답변 주셔서 감사합니다 :

당신이 ControlCollection 사용한 경우

, 내가 코드 이런 식으로 뭔가를 찾고 끝낼 것이라고 생각합니다. Microsoft.Office.Tools.Excel 네임 스페이스를 참조 할 수 없으며 .net framework 3.5 sp1과 Visual Studio 2008 sp1이 설치된 VSTO 3.0 sp1이 필요하다는 것을 알았습니다. 다운로드를 위해 x86 버전의 VSTO가 있지만 x64 버전을 어디서 찾을 수 있는지 알고 있습니까? –