【问题标题】:C#: State of a Checkbox in MS ExcelC#:MS Excel 中复选框的状态
【发布时间】:2013-05-03 19:00:03
【问题描述】:

我正在尝试通过 C# 获取 XLS 文档中存在的复选框的状态。让我在这里备份。这就是我所拥有的:

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

我成功检索了 Excel.Shape 对象。但是,当我试图确定它是否被检查时,我被卡住了。到目前为止,我已经获得了它的 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();
    }
  }

【问题讨论】:

  • 好吧,既然项目可以作为图片获取,使用 Copy() 或 CopyPicture() 可以分析图片本身并找出状态。然而,这种方法听起来相当绝望。

标签: c# excel checkbox interop shapes


【解决方案1】:

我已经在 VB 的帮助下解决了这个问题并构建了类库。这个库在 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");

效果很好。祝你好运!

【讨论】:

  • 是的,必须去 VB 才能完成工作有点蹩脚。谢谢!
  • 我已经尝试实现您的解决方案,并且互操作在 VB 中的行为方式与在 C# 中对我的行为方式相同。 xlWorkSheet.OLEObjects 不返回任何对象
  • 如果你不愿意我可以和你分享编译好的dll吗?如果是,请将您的电子邮件发送给我。
猜你喜欢
  • 2013-03-27
  • 1970-01-01
  • 2014-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多