vb编程在excel中生成柱形图表(vbnet制作GBK2万多汉字笔画表)
vb编程在excel中生成柱形图表(vbnet制作GBK2万多汉字笔画表)三三3二2二2
上期回顾:从excel到VBnet :汉字笔画排序及拼音排序
一1 |
一 |
1 |
二2 |
二 |
2 |
三3 |
三 |
3 |
亖4 |
亖 |
4 |
弍5 |
弍 |
5 |
弎6 |
弎 |
6 |
匤7 |
匤 |
7 |
邼8 |
邼 |
8 |
砉9 |
砉 |
9 |
耕10 |
耕 |
10 |
彗11 |
彗 |
11 |
耠12 |
耠 |
12 |
耢13 |
耢 |
13 |
耤14 |
耤 |
14 |
熭15 |
熭 |
15 |
耩16 |
耩 |
16 |
耫17 |
耫 |
17 |
耮18 |
耮 |
18 |
耯19 |
耯 |
19 |
瓎20 |
瓎 |
20 |
耰21 |
耰 |
21 |
耲22 |
耲 |
22 |
瓚23 |
瓚 |
23 |
瓛24 |
瓛 |
24 |
纛25 |
纛 |
25 |
驠26 |
驠 |
26 |
鬤27 |
鬤 |
27 |
驨28 |
驨 |
28 |
驪29 |
驪 |
29 |
驫30 |
驫 |
30 |
灩31 |
灩 |
31 |
籲32 |
籲 |
32 |
龗33 |
龗 |
33 |
齾35 |
齾 |
35 |
齉36 |
齉 |
36 |
靐39 |
靐 |
39 |
龘48 |
龘 |
48 |
c2公式=LEFT(B2),D2公式=RIGHT(B2 LEN(B2)-1)
笔画定位表
第2步生成GBK 20000多汉字码表GBK汉字都是从&H8140到&HFEFE的编码,相关资料可以搜索一下。
Function 生成GBK汉字()
Dim sz = makearray(24066 3)‘先成sz共24066行,三列
Dim k As Integer = 0
Dim s As String
For i = &H81 To &HFE
For j = &H40 To &HFE
k = k 1
sz(k 1) = "'" CStr(k)’每列前加‘变成字符比较整齐。第1列序号
sz(k 2) = "'" Hex(i * 256 j)’第2列汉字Unicode
s = Chr(i * 256 j) ‘第3列汉字
sz(k 3) = s
Next
Next
Return sz
End Function
Private Sub Button6_Click(sender As Object e As EventArgs) Handles Button6.Click
Dim ws = (New excel).activesheet
Dim sz = 生成GBK汉字()
ws.setgrid(sz 2 1)’直接向2行1列输出汉字表数组
End Sub
因数据达到2万多3列,使用了高速数组,再多数据可以秒得。
3,上图就是获得的表样,然后根据上一期文章中的方法开始进行笔画排序排序之后,因为其中有许多excel2010不能正确排序的汉字,仔细观察发现excel笔画排序的规律:从3126行字符“〇”开始算一画,到“龘”字第24045行都能正确按笔画排序。其他可能不能识别先不管。反正excel可不能识别它们的笔画。中间太多行截图只截取了头和尾,重点是知道方法,以后用VBA也可以自己做。
4,开始进行标准定位。从D3126 字符“〇”开始,先直接输入笔画1接着在D3127中输入公式:=VLOOKUP(C3127 Sheet1!C$2:D$38 2 FALSE)
以上公式,就是在Sheet1!C$2:D$38(也就是本文最开始的笔画定位表)找到第2列的笔画数,然后双击单元格右下角(还在用拖动的方式的OUT了,20000多行拖动会累死人的),直接生成全列公式。其他有#N/A的不用管,它表示找不到所需要的数据。
最终结果图
5,观察上图D列,从D3128到D3136应该都是1画,后面依次类推,从最后用程序去生成E列全部笔画数,任务就完成了。Private Sub Button7_Click(sender As Object e As EventArgs) Handles Button7.Click
Dim ws = (New excel).activesheet
Dim arr = ws.Getgrid("D3126:D24045")
Dim brr = makearray(UBound(arr 1) 1)
Dim k As Integer
For i = 1 To UBound(arr)
If arr(i 1) >= 1 And arr(i 1) < 50 Then
k = arr(i 1)
brr(i 1) = k
Else
brr(i 1) = k
End If
Next
ws.range("E3126:E24045").Clearcontents()
ws.setgrid(brr "E3126:E24045")
Me.Text = Me.Text " OK"
End Sub
上面方法要点就是依次向下找,找不到就以上一个序号生成,找到就换新序号。
以上所有手工过程,其实都可以程序一步到位,我怕程序太多,越讲越乱。主要是想一步步来做,方便演示。中间过程也直观,最后的程序不用程序去填充,也可以手动半自动来拖,就是从1拖到2,从2拖到3,把48个笔画拖完[微笑]
探索3000原创作品,需要这个20920行笔画结果表的网友请关注、点赞、转发三连。私信联系,免费赠送。