【发布时间】:2020-05-07 09:16:31
【问题描述】:
我需要从 Excel 单元格的内容中提取文本段落,在这些单元格中,发起者基本上使用删除线字体进行了手动跟踪更改。这些段落可以通过某些字符模式识别,但我必须忽略删除线字符才能看到它们。删除线字符不会出现在每个单元格内的常规位置,因此基本上随机分布在正常字体文本中。
我已经使用 VBA for Excel 实现了我的目标,但解决方案非常缓慢(而且不切实际)。在搜索了这个网站和更广泛的网络以寻找答案后,似乎应该归咎于 Characters 对象的使用。
所以我的问题是:有没有人找到一种不涉及 Characters 对象的解析此类文本的方法?
我为解析而编写的子代码太长,无法在此处发布,但以下是一些以类似方式使用 Characters 对象的测试代码。这需要 60 秒来解析一个包含 3000 个字符的单元格。以这样的速度,处理给我的整个电子表格需要 50 个小时。
Private Sub FindLineBreakChars(TargetCell As Excel.Range)
Dim n As Integer
Dim ch As String
Dim st As Boolean
If TargetCell.Cells.Count <> 1 Then
Call MsgBox("Error: more or less than one cell in range specified.")
Else
If IsEmpty(TargetCell.Value) Then
Call MsgBox("Error: target cell is empty.")
Else
If Len(TargetCell.Value) = 0 Then
Call MsgBox("Error: target cell contains an empty string.")
Else
'Parse the characters in the cell one by one.
For n = 1 To TargetCell.Characters.Count
ch = TargetCell.Characters(n, 1).Text
st = TargetCell.Characters(n, 1).Font.Strikethrough
If ch = vbCr Then
Debug.Print "#" & n & ": Carriage Return (vbCr)" & ", strikethrough = " & st & vbCrLf
ElseIf ch = vbLf Then
Debug.Print "#" & n & ": Line Feed (vbLf)" & ", strikethrough = " & st & vbCrLf
End If
Next n
End If
End If
End If
End Sub
【问题讨论】:
-
我不太明白你在问什么,你能不能不获取单元格的值,然后在回车时拆分以获取行数组?
-
不幸的是,这并不是那么简单,因为我还必须检查每一行的字符。上面的代码不是我想要做的,它只是我如何使用 Characters 对象的一个类似示例。我尝试编辑原始帖子并上传所需前后结果的图像,但不允许加载图像。
标签: excel vba strikethrough