我有一个从 HTML 表中复制的电子表格,用于我们的一个内部应用程序。该表已粘贴到 Excel (2010) 中,并具有 True/False 值的复选框。有超过 1800 个复选框,加载电子表格需要很长时间。
如何快速将这些转换为是/否值?
我试图创建一个新列并插入一个 IF 语句,但结果总是错误的。我想我引用了单元格值而不是复选框值。复选框的名称类似于“HTMLCheckbox1”...“HTMLCheckbox1824”。
我想不出一种通过 Excel 公式来做到这一点的方法——你没有明确提到它,但你可以使用 VBA 来获得解决方案。
您应该能够通过作为对象OLEObjects
成员的集合访问这些复选框Worksheet
。然后,您可以检查progID
每个对象的 ,看看它是否是一个 HTML Checkbox ( Forms.HTML:Checkbox.1
),如果是这种情况,请记下它的值。
这是我拼凑的一些示例代码,它搜索Sheet1
HTML 复选框,然后用包含以下三个元素的字符串数组填充集合:
例如,HTML<input type="checkbox" name="sports" value="soccer" />
将导致:
然后将此集合写入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