我很难用一个特殊的字符(Unicode U+2028,在XML中显示为as,而在Chrome和Excel单元文本中,它在虚空方格中显示为L)。是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
函数来引用它:
Asc(ActiveCell.Formula)
这是我得到的第一个令人毛骨悚然的东西:上面用于返回63
的代码,但是有一次它将93
返回到相同的单元格内容!尝试ActiveCell.Text
给了我同样的结果。
总之,我试过普通的Replace
Replace(ActiveCell.Formula, Chr(63), "")
Replace
使用臭名昭著的LSEP返回完全相同的字符串(尝试了ActiveCell.Formula
和ActiveCell.Text
,两者都返回了相同的字符串;所以我尝试了Chr(93)
而不是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角色?
耽误您时间,实在对不起!
发布于 2018-04-09 07:41:22
Asc()
& Chr()
只适用于ANSI字符。
相反,可以使用Unicode识别版本:Chrw$(&h2028)
是LSep字符,对应的是AscW()
。
https://stackoverflow.com/questions/49736412
复制