检测并替换LSEP字符()

时间:2018-04-09 15:20:17

标签: excel vba excel-vba unicode

我很难使用特殊字符(Unicode U + 2028,在XML中显示为& #xB,在Chrome和Excel单元格文本中,它在虚线方块中显示为L SEP )。它是this one

Image

我制作了一个打开许多网页的宏,将部分内容复制到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.TextChr(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角色?

谢谢你的时间!

1 个答案:

答案 0 :(得分:2)

Asc()& Chr()仅适用于ANSI字符。

而是使用支持Unicode的版本:Chrw$(&h2028) LSep 字符,其对应字符为AscW()