想把表一的文本拆分成结果表右边的样式,但实际的结果变了结果表左边的样式。也就是把𩡩字拆成了两个字符,𩡩字也不能列在结果表中。
文本拆分.zip (23.6 KB)
代码在压缩文件中,不知问题出在哪里,向各位请教。
想把表一的文本拆分成结果表右边的样式,但实际的结果变了结果表左边的样式。也就是把𩡩字拆成了两个字符,𩡩字也不能列在结果表中。
对扩展区汉字支持欠佳。 四字节汉字被当成两个双字节汉字。
转换思路,用正则应该不难吧
我最近也碰到拆分深僻汉字构词,发生错误的问题,只能手动修正。
现在考虑用试错的方法。
1.构建一个完整的汉字表。
2.用lenb 2byte检查构词的2byte拆分在汉字表里有没有字,有的话,就用2byte拆分。
假如2byte拆分没字,就改用4byte拆分。4byte拆分有字,就用4byte拆分。
假如4byte拆分没字,返回一个特殊记号,过后再检查,看是什么情况。
你的Excel版本假如够新,也可以考虑用Unicode函数检查构词首字。
你得自己实验一下。
我的Excel版本很旧,连你这个文档都无法打开。
换个工具就简单了,复制到emeditor,拆分就一个正则了事。何必局限于EXCEL!
谢谢各位的回复!问题已解决。附上解决的代码,供有此需要者参考。
Sub 拆分()
Dim arr1, mrow&, mcount&, i%
Dim char As String
Dim isFourByte As Boolean
arr1 = Sheets(1).[A1].CurrentRegion.Value
mcount = 1
Application.ScreenUpdating = False
With Sheets(2)
.Columns("A:H").Clear
For col = 1 To 8
.Cells(1, col) = arr1(1, col)
Next
For mrow = 2 To UBound(arr1)
i = 1
Do While i <= Len(arr1(mrow, 1))
char = Mid(arr1(mrow, 1), i, 1)
isFourByte = False
' 判断是否为四字节字符的起始部分
If AscW(char) >= &HD800 And AscW(char) <= &HDBFF Then
' 如果是四字节字符的起始部分,尝试获取下一个字符
If i + 1 <= Len(arr1(mrow, 1)) Then
char = Mid(arr1(mrow, 1), i, 2)
isFourByte = True
End If
End If
mcount = mcount + 1
.Cells(mcount, 1) = char
.Cells(mcount, 2) = arr1(mrow, 2)
.Cells(mcount, 3) = arr1(mrow, 3)
.Cells(mcount, 4) = arr1(mrow, 4)
.Cells(mcount, 5) = arr1(mrow, 5)
.Cells(mcount, 6) = arr1(mrow, 6)
.Cells(mcount, 7) = arr1(mrow, 7)
.Cells(mcount, 8) = arr1(mrow, 8)
' 如果是四字节字符,跳过下一个字符
If isFourByte Then
i = i + 2
Else
i = i + 1
End If
Loop
Next
.Activate
End With
Application.ScreenUpdating = True
End Sub