我有一个从HTML表格中复制的电子表格,用于我们的一个内部应用程序。该表已粘贴到Excel(2010)中,并具有True / False值的复选框。有超过1800个复选框,电子表格需要很长时间才能加载。
如何快速将这些转换为是/否值?
我尝试创建一个新列并插入一个IF语句,但结果始终为false。我想我引用了单元格值而不是复选框值。复选框的名称如“HTMLCheckbox1”......“HTMLCheckbox1824”。
答案 0 :(得分:2)
我想不出通过Excel公式做到这一点的方法 - 你没有明确提到它,但你可以使用VBA来获得解决方案。
您应该能够通过OLEObjects
对象访问这些复选框,该集合是Worksheet
对象的成员。然后,您可以检查每个对象的progID
以查看它是否为HTML复选框(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