【问题标题】:VB.Net: Insert Checkboxes in Excel CellsVB.Net:在 Excel 单元格中插入复选框
【发布时间】:2017-11-15 15:33:53
【问题描述】:

我正在尝试从一堆不同的数据源制作一个易于阅读的 Excel 电子表格。其中一部分是将复选框添加到某一列中的每一行。我相信这不能通过“单元格”来完成,而是通过我读过的电子表格上的位置来完成。

我试过了……

Dim cb As ICheckBox = protoWorksheet.CheckBoxes.AddCheckBox(4, 2, 15, 100)
cb.CheckState = CheckState.Checked
cb.Text = "Test"

但收到以下错误:

发生 System.MissingMemberException' 类型的未处理异常 在 Microsoft.VisualBasic.dll 中附加信息:公共成员 未找到类型“CheckBoxes”上的“AddCheckBox”。

非常感谢任何帮助!

【问题讨论】:

  • 根据错误消息,“CheckBoxes.AddCheckBox”似乎不存在。我认为您可能正在寻找的方法是Checkboxes.Add
  • @soohoonigan 感谢您的回复!我尝试了你的方法,它仍然给了我和错误...An unhandled exception of type 'System.InvalidCastException' occurred in MITRE Project Commander.exe Additional information: Unable to cast COM object of type 'System.__ComObject' to interface type 'Microsoft.Office.Interop.Excel.ICheckBox'.
  • @soohoonigan 这就是你的意思,对吗? Dim cb As ICheckBox = protoWorksheet.CheckBoxes.Add(4, 2, 15, 100)
  • 你是把它读成表格还是写到excel?
  • 写入 excel @codeMonger123

标签: excel vb.net checkbox cell


【解决方案1】:

add 方法适用于普通 Checkbox,而不是 ICheckbox。下面是如何在每一行添加普通复选框的示例:

    Dim xlApp As Excel.Application = New Microsoft.Office.Interop.Excel.Application
    xlApp.Visible = True
    Dim xlWorkbooks As Excel.Workbooks = xlApp.Workbooks
    Dim xlWorkbook As Excel.Workbook = xlWorkbooks.Add
    Dim xlWorksheet As Excel.Worksheet = CType(xlWorkbook.Worksheets(1), Excel.Worksheet)

    'Here, we get the rowHeight so we can position each textbox within each row
    Dim rowHeight As Integer = CInt(xlWorksheet.Range("A1").RowHeight)
    Dim cbWidth As Integer = 100
    Dim cbHeight As Integer = rowHeight
    Dim cbLeft As Integer = 5

    'Adds ten checkboxes to the page, one on each line
    For i As Integer = 0 To 9
        Dim cbTest As Microsoft.Office.Interop.Excel.CheckBox = xlWorksheet.CheckBoxes.Add(cbLeft, (i * rowHeight), cbWidth, cbHeight)
        With cbTest
            .Value = True
            .Text = "TestText" & i.ToString
            .Name = "Checkbox" & i.ToString
        End With
    Next i

    'To check the values of each checkbox, you can iterate the worksheet's checkboxes and check their name/value properties
    For Each cb As Microsoft.Office.Interop.Excel.CheckBox In xlWorksheet.CheckBoxes
        MsgBox(cb.Name & " : " & If(CType(cb.Value, Boolean) = True, "Checked", "Unchecked"))
    Next cb

上面的代码做了几件事来解决 cmets 中的每个进一步的问题。首先,是使用CheckBoxes.Add 方法将复选框添加到电子表格。接下来,因为正如您所提到的,复选框不能添加到行中并且必须使用点定位,所以我获取 rowheight 并将其保存以备后用(在行可能具有不同高度的电子表格中,您可能希望移动该 rowheight循环内部的逻辑并在到达时检查每一行,但对于此示例,单个值就足够了)。然后,只需使用一个简单的 for 循环在每一行中放置一个复选框,使用 rowheight 乘以 row# 来获得正确的位置。我还为每个复选框指定了一个名称,以供以后参考。最后,有一个循环示例,可用于迭代所有电子表格的复选框并检查它们的选中/未选中值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 2019-01-24
    • 2014-06-12
    相关资源
    最近更新 更多