0

我有一个从 HTML 表中复制的电子表格,用于我们的一个内部应用程序。该表已粘贴到 Excel (2010) 中,并具有 True/False 值的复选框。有超过 1800 个复选框,加载电子表格需要很长时间。

如何快速将这些转换为是/否值?

我试图创建一个新列并插入一个 IF 语句,但结果总是错误的。我想我引用了单元格值而不是复选框值。复选框的名称类似于“HTMLCheckbox1”...“HTMLCheckbox1824”。

4

1 回答 1

2

我想不出一种通过 Excel 公式来做到这一点的方法——你没有明确提到它,但你可以使用 VBA 来获得解决方案。

您应该能够通过作为对象OLEObjects成员的集合访问这些复选框Worksheet。然后,您可以检查progID每个对象的 ,看看它是否是一个 HTML Checkbox ( Forms.HTML:Checkbox.1),如果是这种情况,请记下它的值。

这是我拼凑的一些示例代码,它搜索Sheet1HTML 复选框,然后用包含以下三个元素的字符串数组填充集合:

  • HTML名称
  • 价值
  • 已选中

例如,HTML<input type="checkbox" name="sports" value="soccer" />将导致:

  • HTML名称:“运动”
  • 价值:“足球”
  • 已检查:“真”或“假”取决于是否已检查

然后将此集合写入Sheet2. 复选框值被转换为字符串。

Sub GetCheckBoxValues()

    Dim colCheckboxValues As Collection

    Set colCheckboxValues = GetCheckBoxValuesFromSheet(Sheet1)

    Dim lCount As Long

    For lCount = 1 To colCheckboxValues.Count

        Sheet2.Cells(lCount, 1).Value = colCheckboxValues.Item(lCount)(0) 'HTMLName
        Sheet2.Cells(lCount, 2).Value = colCheckboxValues.Item(lCount)(1) 'Value
        Sheet2.Cells(lCount, 3).Value = colCheckboxValues.Item(lCount)(2) 'Checked (or unchecked)

    Next lCount

End Sub


Function GetCheckBoxValuesFromSheet(sht As Worksheet) As Collection

    Const HTMLCheckBoxProgID As String = "Forms.HTML:Checkbox.1"

    Dim colCheckBoxes As Collection
    Set colCheckBoxes = New Collection

    Dim oOLEObject As OLEObject

    Dim lCount As Long
    lCount = 0

    For Each oOLEObject In sht.OLEObjects

        If oOLEObject.progID = HTMLCheckBoxProgID Then

            Dim sCheckBoxData(2) As String

            sCheckBoxData(0) = oOLEObject.Object.HTMLName
            sCheckBoxData(1) = oOLEObject.Object.Value
            sCheckBoxData(2) = oOLEObject.Object.Checked

            lCount = lCount + 1

            colCheckBoxes.Add Item:=sCheckBoxData, Key:="CheckBox" & CStr(lCount)

        End If

    Next oOLEObject

    Set GetCheckBoxValuesFromSheet = colCheckBoxes

End Function
于 2012-08-10T16:05:25.910 回答