2013-05-09 2 views
2

C#을 통해 XLS 문서에있는 확인란의 상태를 가져 오려고합니다. 여기서 다시 보자.C# : MS Excel의 확인란 상태

  • MS 오피스 2007 + 개발 도구 및 VC의 # 2010 익스프레스
  • 참조 된 MS 엑셀 12.0 개체 라이브러리는
  • XLS 문서

내가 성공적으로 Excel을 검색 : 이것은 내가 가지고있는 것입니다. Shape 객체입니다. 그러나, 내가 여부를 확인하려고 여부를 막혔어요. 지금까지 msoShapeMixed라는 AutoShapeType을 얻었습니다.

나를 올바른 방향으로 안내 할 수 있습니까? 감사!

class Program { 
    static void Main(string[] args) { 
     Application excel = new Application(); 
     Workbook wb = excel.Workbooks.Open(
     "document.xls", 
     Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
     Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
     Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
     Missing.Value, Missing.Value 
    ); 
     Worksheet ws = wb.Worksheets[3]; 
     Microsoft.Office.Interop.Excel.Shape sh = ws.Shapes.Item("checkbox1"); 
     Console.WriteLine("[" + (sh.AutoShapeType.ToString()) + "]"); // msoShapeMixed 
     Console.ReadLine(); 
    } 
    } 
+0

글쎄, 항목을 그림으로 얻을 수 있기 때문에 Copy() 또는 CopyPicture()를 사용하여 그림 자체를 분석하고 그런 식으로 상태를 찾을 수 있습니다. 그러나 이러한 접근 방식은 필사적으로 들립니다. –

답변

2

저는 VB의 도움으로이 문제를 해결했으며 클래스 lib를 빌드했습니다. 이 lib는 C#에서 사용됩니다.

VB :

Option Strict Off 
Imports Excel = Microsoft.Office.Interop.Excel 

Public Class CheckboxReader 
    Dim xlApp As Excel.Application = Nothing 
    Dim xlWorkBooks As Excel.Workbooks = Nothing 
    Dim xlWorkBook As Excel.Workbook = Nothing 
    Dim xlWorkSheet As Excel.Worksheet = Nothing 

    Public Sub New(ByVal excelFilename As String, ByVal worksheetName As String) 
     xlApp = New Excel.Application 
     xlApp.DisplayAlerts = False 
     xlWorkBooks = xlApp.Workbooks 
     xlWorkBook = xlWorkBooks.Open(excelFilename) 
     For Each worksheet As Excel.Worksheet In xlWorkBook.Worksheets 
      If worksheet.Name = worksheetName Then 
       xlWorkSheet = worksheet 
       Exit For 
      End If 
     Next 
    End Sub 

    Public Function GetCheckBoxValue(ByVal Name As String) As Boolean 
     Dim found As Boolean = False 
     Dim result As Boolean = False 
     If Not found Then 
      result = xlWorkSheet.OLEObjects(Name).Object.Value() 
      found = True 
     End If 
     Return result 
    End Function 
End Class 

C 번호 :

CheckboxReader chr = new CheckboxReader(excelFilename, worksheetName); 
bool typeFabInstall = chr.GetCheckBoxValue("checkboxName"); 

잘 작동합니다. 행운을 빕니다!

+2

그래, 일을 끝내려면 VB로 가야하는 것이 다소 안타깝다. 고맙습니다! –

+0

나는 당신의 솔루션을 구현하려고 노력했다. 그리고 interop은 VB에서 C와 마찬가지로 나를 위해 동일한 방식으로 행동한다. xlWorkSheet.OLEObjects가 객체를 반환하지 않습니다 – Marek

+0

만약 내가 당신과 함께 컴파일 된 dll을 공유 할 수 없을까요? 그렇다면 이메일을 보내주십시오. – Kaster