我很难使用特殊字符(Unicode U + 2028,在XML中显示为& #xB,在Chrome和Excel单元格文本中,它在虚线方块中显示为L SEP )。它是this one:
我制作了一个打开许多网页的宏,将部分内容复制到Excel工作表中的单独单元格中。大部分时间它都表现良好,但最近我需要研究的网页的一位内容发布者开始使用LSEP角色(我不知道为什么,也许他正在使用新的文本或HTML编辑器;我与他们中的任何人都没有联系。)
因此,Excel无法打开xlsx,在/xl/sharedStrings.xml文件中返回XML错误。当我将MySheet.xlsx重命名为MySheet.xlsx.zip并打开令人不安的文件时,我发现错误是由那个可怕的角色引起的。手动,我删除了LSEP字符,替换了sharedStrings.xml,将MySheet.xlsx.zip重命名为MySheet.xlsx,它打开了。
在弄清楚我的问题之后,下一步是将一些代码写入我的宏,以自动替换LSEP字符。作为一个特殊的角色,我的方法是尝试通过 Asc(ActiveCell.Formula)
函数引用它:
63
这是我得到的第一个怪异的东西:上面的代码用于返回93
,但有一次它将ActiveCell.Text
返回到相同的单元格内容!尝试Replace
给了我相同的结果。
无论如何,我已经尝试了正常 Replace(ActiveCell.Formula, Chr(63), "")
:
Replace
ActiveCell.Formula
返回了完全相同的字符串,臭名昭着的LSEP(同时尝试了ActiveCell.Text
和Chr(93)
,两者都返回了相同的内容;所以我尝试使用{ {1}}代替Chr(63)
,没有成功。)
然后,我试图找到臭名昭着的偷偷摸摸的忍者海盗LSEP角色,所以我尝试了:
InStr(1, ActiveCell.Formula, Asc(63)) 'Or Asc(93), again the same results
回报为0
。所以,震惊但没有被击败,我揉了揉我的魔法灯,并向VBA天才问道:
MsgBox "Where's Chr(63)? " & InStr(1, ActiveCell.Formula, Chr(63)) & vbCrLf & _
"Where's Chr(93)? " & InStr(1, ActiveCell.Formula, Chr(93)) & vbCrLf & _
"Asc(Right(ActiveCell.Formula, 1)): " & Asc(Right(ActiveCell.Formula, 1))
作为回应,VBA告诉我0
第一行和第二行(比如没有Chr(63)
或Chr(93)
),同时告诉我最右边的字符相同的字符串是Ascii 63!
这怎么可能?有没有人有想法?我完全迷失了。 如何在我的代码中提前检测并替换这个隐形的忍者海盗LSEP角色?
谢谢你的时间!
答案 0 :(得分:2)
Asc()
& Chr()
仅适用于ANSI字符。
而是使用支持Unicode的版本:Chrw$(&h2028)
是 LSep 字符,其对应字符为AscW()
。