2009-12-09 3 views
0

기존 Excel 템플릿에 콤보 상자 (드롭 다운 목록 컨트롤)가 있습니다. VBA에서이 콤보 박스를 Sheet10.ComboBox1로 참조 할 수 있습니다.C#에서 Excel.ComboBox에 액세스

C#에서 Excel Interop을 통해이를 어떻게 참조 할 수 있습니까?

내가하려는 것은이 콤보 상자/드롭 다운을 C#으로 채우고 템플릿으로 원하는 위치에 배치하는 것입니다.

미리 감사드립니다.

답변

0

VBA 코드는 다음과 같습니다. 기본적으로 ComboBox에 해당하는 항목을 찾으려면 Worksheet.Shapes 컬렉션에 액세스해야합니다 (인덱스 또는 더 현실적으로 이름별로). 그런 다음 OLEFormat -> Object -> Object 속성을 트래버스하여 적절하게 캐스팅합니다. C# 코드는 매우 유사합니다.

Dim wks As Worksheet 
Dim objShape As Shape 
Dim objComboBox As ComboBox 
Dim objOleObject As Excel.OleObject 

Set wks = Sheet1 
Set objShape = wks.Shapes(1) 
' or Set objShape = wks.Shapes("ComboBox1") 
Set objOleObject = objShape.OLEFormat.Object 
Set objComboBox = objOleObject.Object 
0

이 항목은 다른 .NET 구성 요소가 아닌 사용자를위한 것이기 때문에 API에 문서화되어 있지 않습니다. 그럼에도 불구하고 Excel 2010의 첫 번째 시트 (그렇지 않으면) 빈 통합 문서에서 "상자 1"이라는 Form ComboBox에서 첫 번째 항목을 선택한 방법은 다음과 같습니다. ExcelDna 및 log4net을 사용하므로 로그 행과 나는 나의 탁월한 참고 자료를 얻는다. 나는 둘 다 추천한다.

using Microsoft.Office.Interop.Excel; 

Application Xl = (Application) ExcelDnaUtil.Application; 
DropDown box; 

try 
{ 
    box = Xl.ActiveWorkBook.Sheets["Sheet1"].DropDowns("Box 1"); 
} 
catch (Exception e) 
{ 
    Log.Fatal("Failed to find drop down called 'Box 1' on sheet", e); 
    throw; 
} 
try 
{ 
    box.Selected = 1; 
} 
catch (Exception e) 
{ 
    Log.Fatal("Failed to set value of drop down", e);    
    throw; 
} 
관련 문제