2013-05-09 83 views
2

我试图通过C#获取XLS文档中存在的复选框的状态。让我回到这里。这是我有:C#:MS Excel中复选框的状态

  • MS Office 2007的+开发工具和VC#2010速成
  • 引用的MS Excel的12.0对象库
  • 的XLS文件

我成功地检索Excel中。形状对象。然而,当我试图确定它是否被选中时,我被卡住了。到目前为止,我已经获得了它的AutoShapeType,它说msoShapeMixed。

有人能指引我走向正确的方向吗?谢谢!

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(),可以分析图片本身并以此方式找出状态。然而,这种做法听起来相当绝望。 – 2013-05-10 06:00:50

回答

2

我已经解决了这个问题与VB的帮助和建立类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去完成这些工作。谢谢! – 2013-05-14 20:59:16

+0

我试着实现你的解决方案,互操作在VB中的行为与C#中的行为一样。 xlWorkSheet.OLEObjects不返回对象 – Marek 2016-07-07 10:49:58

+0

如果你愿意,我可以与你分享编译的dll文件吗?如果是的话,给我发电子邮件。 – Kaster 2016-07-07 13:59:38