我有一个包含大量文本的 Excel 文件,我刚刚发现其中包含零宽度字符,这些字符无法正常显示。
我正在进行字符串比较,但它们引起了问题。
花了将近一个小时试图找到一种方法来删除它们,但没有找到任何方法。
Linux 终端命令和 JavaScript 替换了我发现的函数,但它们并不适用于我的情况。
我尝试使用 Excel 中的替换功能,但它说没有找到任何要替换的内容。但是,如果我使用“仅查找”并粘贴零宽度字符,它确实会在文本中找到它们。但是替换不起作用。
答案1
发现了一个愚蠢但简单的解决办法。
- 选择 Excel 中包含此字符的数据的整个列。
- 复制所选内容。保持所选内容为开启状态。暂时不要取消选择。
- 将数据粘贴到记事本中。
- 使用记事本的替换功能删除所有零宽度字符。
- 选择记事本中的所有文本(CTRL + A)并复制。
- 将其粘贴回 Excel,覆盖之前选择的内容。
简单!希望这能帮助其他人 :)
答案2
尝试一下这个宏:
Sub deleteNothing()
Dim rLook As Range
Dim wf As WorksheetFunction
Set wf = Application.WorksheetFunction
For Each r In ActiveSheet.UsedRange
If Len(r.Value) = 0 And wf.CountA(r) = 1 Then
If rLook Is Nothing Then
Set rLook = r
Else
Set rLook = Union(rLook, r)
End If
End If
Next r
If rLook Is Nothing Then
Else
rLook.Clear
End If
End Sub
答案3
我遇到过这种情况,我确实需要使用 VBA 来修复它。对我有用的解决方案是打开立即窗口(按Alt+F11
然后Ctrl + G
)并运行以下命令,该命令通过用空字符串替换所有零宽度空格(Unicode 字符 8203)来清除它们:
ActiveSheet.UsedRange.Replace What:=ChrW(8203), Replacement:="", LookAt:=xlPart
只是因为您可能想检查是否解决了问题,我在运行之前运行的代码检查了它是否有零宽度空间Debug.Print instr(ActiveCell.Text, ChrW(8203))
。当我在执行上面列出的操作之前运行它时Replace
,它返回了1
,并且在运行之后Replace
,它返回了0
,所以这是成功的。