기존 Excel 템플릿에 콤보 상자 (드롭 다운 목록 컨트롤)가 있습니다. VBA에서이 콤보 박스를 Sheet10.ComboBox1로 참조 할 수 있습니다.C#에서 Excel.ComboBox에 액세스
C#에서 Excel Interop을 통해이를 어떻게 참조 할 수 있습니까?
내가하려는 것은이 콤보 상자/드롭 다운을 C#으로 채우고 템플릿으로 원하는 위치에 배치하는 것입니다.
미리 감사드립니다.
기존 Excel 템플릿에 콤보 상자 (드롭 다운 목록 컨트롤)가 있습니다. VBA에서이 콤보 박스를 Sheet10.ComboBox1로 참조 할 수 있습니다.C#에서 Excel.ComboBox에 액세스
C#에서 Excel Interop을 통해이를 어떻게 참조 할 수 있습니까?
내가하려는 것은이 콤보 상자/드롭 다운을 C#으로 채우고 템플릿으로 원하는 위치에 배치하는 것입니다.
미리 감사드립니다.
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
이 항목은 다른 .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;
}