admin 管理员组文章数量: 887032
2024年1月24日发(作者:proposal的形容词形式)
S0 RE DEVELOPMENT&APPLIC盯ION… … 一 用VBA实现Excel电子表格汉字与拼音的转换 王娜,刘思国,李亚静 (巾交天津港湾f:程研究院有限公剐,火津300222) 摘要:利用VBA编程,调用自定义的汉字一拼音转换函数,实现了Excel电子表格中中文与拼音的快速转换 关键词:Excel表格;VBA语言;汉字;拼音;转换 随着计算机的普及应用,传统的纸质印刷文档逐渐被 电脑电子文 替代,办公软件已成为处理文档时不可或缺 的1-具。Excel是一款功能强大且使用频繁的办公软件,在 HR部门常被刖来记录和管理人员的名单和联系方式,分析 和处理人员的业绩、收入等数据。但在某些情况下,Excel 并不能完全满足HR部门的需求,例如Excel中没有定义汉 字与拼音的转换函数,不能直接将表格中的’7义字转换为拼 音: 企业人员较少时还可以用键盘手动输入拼音,但 人数成盯上下时,采川手动输入的方法就极大地降低丁 1 作效率 利用VBA对Excel进行二次开发.可有效地白定义干¨ 扩展Excel的功能,例如:可将Excel电子表格中的汉字转换 为拼音。首先采用VBA编程定义了汉语一拼音转换函数,然 后涮刚该自定义的转换函数,实现_r汉字一拼音的快速转换。 1 VBA和汉字编码规则 1.1 VBA VBA是Visual Basic:for Application的简称,是基于 Visual Basic For Windows发展起来的新一代通用宏语吉. 为Microsoft的呵编程应用软件所共享 、在Excel中.函数 分内置函数、扩展函数和自定义函数3类。内置函数是只 要启动了Excel就可以使用的函数.扩展函数是必须通过加 载宏命令才能正常使川的雨数.自定义函数是通过VBA代 码实现特定功能的函数。Excel自定义 数南用户自己编写 开发,一个白定义函数就是一个Function过程 在Excel巾 用VBA代码创建自定义蛹数具有如下优点: (1)简化工作流程,解决需要较多辅助列或使用较长 公式才能完成的汁算问题。 (2)解决不能刚现有的T作簿函数完成的计算问题. 如创建汉宁和拼音的转换函数。 1.2汉字编码规则 方法以GB2312和GB18030的汉字编码规则为基础.. GB23 l2全称“信息交换川汉字编码字符集基本集”.是一 个简体【f】文字符集的中陶同家标准.共收录6763个汉字. 分两级,第一级汉字3755个,置于16 至55区.按汉字 拼音字母顺序排列,同音字以笔形顺序横、rf、撇、点、 折为序;第二级汉字3008个,置于56 87 .按首鄙 排列,间I田i数的字也以笔形顺序为序. 对仃意一个 肜字 符部采川两个宁节表示,『j仃向的字节为笫一字节,后面的 字节为第二宁节。GB2312所收录汉字的分级 排列详 该 规范附求2 GBl8030仝称“信息技术lf】义编码字符集”,规定Tile 息技术J}j的l{1 义图形字符及其二进制编码的卜六进制表示. 与GB23I2信息处理交换码对膻的内码兼容 、标准中任何 一个字节均F}1 8位二进制他中组成,任何一个8化的值均 }}i OxO0至OxFF的}六进制计数法表爪。GB18030将 GB2312收录的6763个汉 安排存“双字节2 JX”, 位范 同为:菏字节0xB0~0xF7,尾字节OxA1~0xFE..可 GB18030中,简体中文的编码范闱为BOA1~F7FE.其中 B0~D7埘应GB2312的16 lxl至55 (D7FA~D7FE是5个 空位).D8~F7对懂GB2312的56 至87 、 2汉字一拼音转换原理 以GB18030规范BOAl~FTFE编码范¨;l内的6763个汉 字为例,介绍 Excel表格If1利川VBA代码实现汉宇转换 为拼音的办法,这些汉字覆盖了中罔大陆汉 99.75%的使 川频率,编码基本满足汉字的计算机处理需受 曳“表l所 示,通过如下4步,可实现汉字一拼音的转换 (1)根据GB2312和GBl8030中汉字的分级与排列规 律,建 行数为72、列数为94的二维同定夫小数组( B— HZ一6763(72,94)(同标r}1 6763个汉字组成的数组,简 为GBHZ_6763)。 (2)给数组GBHZ6763(72,94)中的每个汉7赋了:伞 拼拼音,形成数组GBPY一6763(72,94)( 标6763个汉 字拼音纰成的数组,简记为GBPY一6763)。 (3)利JH汉字中文编码 Excel字符他的一一对应天 系,用VBA函数Asc0获取数组GBHZ一6763(72,94)中各 汉字的Ex(-el字符值,将该值 为(.BHZ—Ex(・eLID,I叮采川t 收稿日期:2016—12-04 -铺藿 20l巧17与.0jI4 ;-31
………………………………………………………一 实用第一 智慧密集 如下Sub过程获取汉字的Excel字符值,值得注意的是, 2区”最后一个表中按倒序排列的汉字拼音数组,PY(72) 为GB 18030“双字节2区”第一个表中按倒序排列的汉字 拼音数组,PY(O)为GB 18030“双字节2区”各表最后 一Exeel中汉字的字符值为负数。这样.拼音数组GBPY_6763 (72,94)巾的各拼音与GBHZ_ExcelID也具有了一一对应 关系。表1列m了GB 18030“双字节2区”各表最后一个 _汉字的Excel字符值。 Sub GBHZExcelID() _—个汉字的Excel字符值数组(详见表1)。数组PY(2)~ PY(71)中为GB 18030“双字节2区”其余各表汉字的拼 音.在此不一一列举。 表2 Sub过程中主要函数及符号说明 序号 VBA函数 l 函数说明 Dim A As Integer A=Asc(Worksheets(i).Range("A1。).Value)‘i为工作簿编号 MsgBoxA End Sub S返回一个下标从零开始的一维数组.它包含指定数目 plit 的子字符串。 (4)利用VBA函数Asc0获取Excel工作簿中汉字 (记为HZ)的字符值,将该值记为HZ_ExceLID,比较 HZExcelID和GBHZ_ExcelID的大小.当HZ—Excel_ID ——2 UBound 数组的指定维的最大可用下标。 Sub GBPY() Dim iAs Integer,i As Integer 与GBHZ_Excel—ID数值相等时,将GBHZ—Excel—ID对应的 拼音赋予HZ.. Dim MM As Variant 定义中间数组MM,为一维数组 Dim PY(72)As String 定义GB 18030“双字节2区”各 表1 GB 18030“双字节2区”部分汉字的 Excel字符值和拼音 序 汉字 十六进 Excel 拼音 序 十六进 Excel 序 十六进 Excd 号 糊编码 字符值 号 汉字 制编码 字符值 拼音 号 汉字 割编码 字符值 拼音 1 藉 F7FE 一2050 zhal 25 唼 DFFE 一8l94 sha4 49 渠 C7 一l433S qⅡ2 表中的汉字拼音数组PY(72),为72个一维数组 PY{0)=“一2050,一2306,一2562,一281 8,一3074,一3330,一 3586,一3842,一4098,一4354,一461 0.一4866,一51 22,一5378.一 5634,一5890,一6146,一6402,一6658,-6914,一7170,一7426.一 7682,一7938,一81 94,一8450,一8706,一8962,一921 8,一9474,一 9730,一9986,一10247.一1O498,一10754,一1 1O10.一1 1266,一 1 1522,一1 1778,一12034,一12290.一12546,一12802,一13058,一 13314,一13570,一13826,一14082,一14338.一14594,一14850.一 15106,一15362,一15618.-15874,一16130,一16386.一16642.一 16898,一17154,一17410,~17666,一17922,一18178,一18434,一 18690 一18946,一19202,一19458 一19714,一19970.一20226 ” 2 鳋 F6FE 一2306 s劬1 26 撤 nEFE 一8450 ban4 卯 掐 C6FE —I4594 qiat 3 觜 F5FE 一2562 zIl 27 蔺 DDFE 一8706 Iin4 51 毗 C5FE 一1485o 4 酤 HFE 一2818 I 28 荥 Dc张 一8962 噼 52 丁 c4F^ E —l5l06 mg2 5 簋 F3FE 一3074 gui3 29 埝 DB飘 一9218 nian4 53 摸 C3 一15362 m0l 6 蟒 F2FE -3330 malI{;3 3o 酆 D^陀 一9474 54 漫 C2Ⅱ 一15618 man4 7 颃 FIFE 一35s6 hang2 3l 冼 D9FE 一97如 :dan3 55 窿 C1FE 一15盯4 long2 8 瘙 F0FE 一3842 sao4 32 佝 DSFE 一9986 goul 56 俐 c0FE —I613o M 9 稔 EFFE -4098 ten3 33 座 D7丹 一l0247 zoo4 57 傀 BFFE 一16386 gIlil lO 铪 EEFE _4354 hl 34 筑 D6FE —l0498 zhu4 58 竣 驰FE —l6642 jun4 I1 脘 EDFE 610 hi4 35 政 D5FE 一10754 出 59 爰 BDFE 一1689昙 jill4 PY(1)=“zhal,hanl,qiu2,xi1,yan3,wu2,you4.fen2,an4, can3 qing2 li2.du2 qul yil xia2 you3 chu4 dai4 lin2 she4 l2 忐 ECFE -4866 IaTI3 36 轧 D4FE —Il010 z}la2 60 件 BCFE —l7l54 jian4 l3 膻 EBFE 一5l22 sllanl 37 誉 D3FE —Il266 vlI4 6l 箕 BBFE 一17410 jil l4 掰 EAFE 一5378 hil 38 隐 D2FE —I1522 n3 62 湖 队FE —l7666 ha2 l5 辋 E9FE 一5634 wang3 39 瑶 DlFE -1l778 yao2 63 哈 B9FE 一17922 ha3 ao2,qi2 mi2,zhu3,Junl,ii3,mi2,huil.me5.1ie4,huan2.bin4,ji— ul quan2 xiul zil ji4 tiao2.ran2.mac2 kunl biao1 yong1 taol,tie4。van4,xiang3,chil,wang3,xiaol,Iiang3,yan3,ba2, mei4.du2,bin4,kuan1.qia4,lou2,bi4,kel,ge2,hou2,di3,gu3. l6 棹 ESFE 一58帅 ,hao4 柏 玄 D0FE —l2o34 xuna2 矾 羹 B8 一l8178 gengl 17 琬 E7FE _6l46 wn3a 4l 跷 CFFE —l2290 xho3 65 服 B7死 一l8434 fu2 18 圹 E6FE 枷 kua耐 42 牺 CEFE —l2546 1 66 B6FE —l8 e,4 kul,tou2,jie4,bei4,goul,rou2,ju1,jianl,man2,qiao2,da2, yangl,da2.1i3,zunl,shan4,gui4.yong1.min3.man2,xue3. l9 妣 ESFE _665S hi3 43 威 CD雎 一l28位 wci1 67 叠 B5职 一l8946 dlc2 20 濑 E4FE -69t4 lm 44 烃 ccFE 一13058 fingl 68 逮 B4 一l9202 3 2l 泾 E3FE 一7170 】ingl 45 塔 CBFE 一133l4 Ia3 69 楚 B3FE —l9 8 chu3 biao4,le4.yao2 guanl,ta3,qi2.ao2,’’ PY(72)=“baol,bao1.baol,baol,baol,bang4,bang4, bang4.bang4,pang2.bang4,bang3.bang3,bang3,bang1. 22 恂 E2FE 一7426 xun2 46 漱 cAF色 一I357o shIl4 70 猖 B2FE 一197l4 ehngl 23 捂 ElFE 一7682 vin2 47 绳 c9 一l3826 sheng2 7l 炳 Bl砸 一19卯0 bing3 24 帼 EOFE 一7938 gao2 48 叁 C8FE —l4082 sanl 72 剥 B0FE 一20226 bnal bang1 bang1 ban4 ban4 ban4.ban4 ban4 ban4 ban4 ban3 ban3.ban1.ban1,ban1,ban1,ban1.ban1,bai4,bai4,bai4,bai3, 注:表中拼音后的数值表示声调.1表示一声,2表示 二声,3表示三声,4表示四声。 bai3 bai3 bai3 bai2 ba4 ba4 ba4.ba4 pa2 ba3 ba3 ba2 ba2 ba1 rba1.ba1 lba1,ba5,ba1,ba1.bal,ba1,ao4.ao4,ao4,ao4. ao3.ao2,ao2.ao2.aol,ang4,ang2,angl,an4.an4,an4,an4 3汉字一拼音转换的VBA代码实现 3.1建立拼音数组 an4 an3 an1 an1 an1 ai4.ai4 ai4 ai4 ai3 ai3 ai2 ai2 ail al1. 创建Sub过程,通过For循环.建立拼音数组 GBPY一a a.1la a1,a1,” MM=Split(PY(0).。. ) ReDimGBHZ_Excel—ID(UBound(MM)) For i=1 To UBound(MM) 6763(72,94),关键语句如下,其中用到的重要 VBA函数列于表2。语句中,PY(1)为GB 18030“双字节 2017疆.042/'i3/电■■疆技圬与毫壬电__技『i'_●‘ 圬与毫 Ii
GBHz_Excel—ID(i)=MM(i一1) 建立数组GBHZ_ExcellD(), _Dim N As Integer Dim HZExcelID As Long 定义数组HZ_Excel—ID, ——为一维数组 Next i For i=1 To 72 存放需进行拼音转换的汉字的字符值 Dim Y As Byte MM=Split(PY(i),”,”) For 1 TO UBound{MM) GBPY6763(i,j)=MM 一1) 建立拼音数组 Dim A_HZ As String 定义数组A_HZ,存放需进行 拼音转换的汉字,字母A为Array的首字母 Dim APY As String 定义数组A—PY,存放需转换 _GBPY_6763(),为72行、94列的二维数组 Nextj Next i End Sub 32 自定义I1il1 1函数 创建Fu1|{、tim]过程,迎过Fm・循环、In}}句卡¨Selet・t (: 语句,I't定义Pin' ̄ in闲数. ,口]如_F,其rI】用到的重 VBA 数列于表3 PllIYin甬数主要参数的含义为:Hz 衷示Exc-el f:作簿『f】需进行拼f1 转换的汉7,Delimiter表示 拼肯Ih 分隔符.Tpy表爪所转换的拼肯的型式 、使川该函 数处理Ext,le汉字时,有8种¨丁供选择的拼音型式,如表4 所乐 表3 Function过程中主要函数及符号说明 号、BA 数 闲数 兑I删 ; 。・维数组,它包禽指定数目的于 I.一… .陋 一个下标从零"始的字符串 2 L I{(1und数组的指定维的蛙人『】r川Vt,J; 3 Tr|I1 l除了单词之 的单个夺格外,清除史本中所柏的空格 4 1.en 统汁文本字符串ff1 #符数H 5 Mic l 从一个文本字符f 々指定位置开始.戡取指定数门的字符。 6 As 趣网汉字的Excel 符fill,勾负值 7 UBmmd敬纽的指定维的艇火II『J]J F标 8 lIf 掘表达式的值,米返…棚部分t1l6々其_l1一个。 9 & 字符串连接符 表4 Select Case语句定义的8种拼音型式 拼音型I r ]式编号l C一 ill:'uJ 拼爵型式说明 、写.垒拼.无堋 1APY=SirCom IAI 、 ,31 If 2 f Case2 rpypY=llf(A_I’、=A—Hz.A_l’¨‘}T j,令拼,无声调 ifI!_^: L!. n(A—P、_)二I 一 l A PY=UCase(A~l Y) 3 Case3 Tp>PY=llf(A_I Y=A_l I .一_】’、 火’i.全拼,尤声’周 lMid I :I:!,l,l I】(A—I’Y)一I))J—— J l4 _1- Case4 TI,y_I,、 =I n(A_l Y_1) 小 譬.首字母,无声调 5 Cast 5 TI,Y_J Y=UCas ( n(A一1 Y.1))大写,首字母,无声调 6 Cast 6 Tpy PY=APY 小写,全拼,仃声嗣 7 Case'"]。TpyPY=StrCom(A—I Y.3l It1写,全拼,有声凋 !!!_r IY=UCase(■ )_ -伞 ,塑皇 Public Function PinYin(HZ As Variant.Delimiter As String,Tpy As Byte)As String 后的拼音 Dim Tpy—PY As String 定义数组Tpy_PY,存放需不 同型式的拼音 On Error Resume Next 发生错误时,继续执行下一句 代码 Call GBPY‘调用Sub过程 If HZ=…‘Then PinYin=…’ Exit Function End ff For i=1 To Len(Trim(HZ)) A HZ=Mid《Trim(HZ),i,1) lfA HZ= Then Tpy—PY=”” Else Hz_Excel—I D=Asc(A_HZ) For N=1 T0 UBound(GBHZ .Excel JD)If GBHz-Excel—ID(N)<HZ_Excel—ID Then Exit For End If Next N D—value=GBHZ Excel—ID(N一1)一HZ—Excel—ID 计算 Excel中汉字字符值的差值,记为D—value tf D value<0 Or D—value>93 Then A PY=A HZ Y=1 Else A_PY=GBP、 6763(N一1,D_vatue+1) 从拼音数组 GBPY一6763中获取拼音 End If End If Select Case Tpy 具体语句详见表4 End Select PinYin:PinYin&IIf(A _PY=A._HZ,Tpy—PY,IIf(Y=1 De— Iimiter&Tpy PY&Delimiter,IIf(i=Len(Trim(HZ)),Tpy_PY, Tpy_PY&Delimiter))) Y=Iif(Y=1,IIf(A_PY=A_HZ 1 O),0) Next i End Function 3.3汉字~拼音转换结果 E el I:作簿中,使川 定义的 Yin 数.川‘快 速地 州-『义 一拼青转换,以“我们V,j ̄1tl叫址 ̄gl,o1.7El, ̄lf'l"J 蕾缩 护33
t■ ’ - ●_ _ ,…_… - …●t ●_●●●… ,…●_… …’●●●…-- … ● 实用第一 智慧密集 ,。…,. .… 。. . , 花朵真鲜艳 ”一句为例,在Excel工作簿空白处输入“= pinyin(X,””,Tpy)”(X为汉字在Excel 3-.作簿中的编 号,Tpy为想得到的拼音型式),拼音输出结果如表5所示。 表5 VBA代码汉字一拼音转换结果 汉字 一拼音转换 花园的花朵真鲜艳。 iyuan de hua duo zhenxianyan。 a Yuan De Hua Duo Zhen Xian Yah。 JA YUAN DE HUA DU0 ZHEN XI— I YAN。 4结语 以GB2312和GB 18030的汉字编码规则为基础,利月 VBA编程,白定义了可在Excel T作簿中使用的“汉字一{; 音转换函数”,该函数可方便、快捷地将GB 18030规 BOA1~F7FE编码范围内的6763个汉字转换为拼音,显 提高工作效率。 参考文献 [1】ExcelHome.Excel VBA其实很简单【M】.北京:人后 邮电出版礼,2012. 【21魏汪洋.Excel 2007 VBA高级编程宝典【M】.北京:哇 子工业出版社.2009. D H D ZX Y。 yuan2 de5 hual duo3 zhenl xianl Yuan2 De5 Hual Duo3 Zhenl Xi. fan4。 l YUAN2 DE5 HUAl DUO3 1 XIAN1 YAN4。 .[3]GB 2312-80信息交换用汉字编码字符集基本集[s】. [4l GB 18030—2005.信息技术中文编码字符集【S1. S止.S也.址.S止.S止.S‘.址.S止.S止.5止.址. -L.S也.址.5止.喜屯.址 驰.S止.S止 .S止.札.S止.札.S也.喜 .址 .‘屯.S‘L.S止.S止.S‘.址.S止. 止.5止.址. 屯.{止. 止.址.5l上. (上接第27页) 3.4 GHO文件制作 在PE环境中使用Symantec公司的GhostI1进行GHO 文件的制作,选择源分区和目标分区后进行高压缩比的压 缩,进一步减小GHO文件体积,为13后系统软件的升级和 添加预留空间。具体步骤如图2所示。 图3 ISO文件制作 4实际部署前测试 经过封装压制,可以将成品的lSO文件在虚拟机中jI 行测试.主要测试启动项能否正常启动.菜单是否有效 PE系统能否正常引导等,还可以在虚拟机中进行一次实 的部署.以测试万能驱动包以及其他软件能否正常注入 统,经过实际的测试,该ISO镜像就可以进行刻录使用了 Win7自带的ISO镜像刻录机进行刻录,为了能在一张DV] 光盘中刻录整个镜像,需要在封装过程中适度精简系统 图2 GHO文件生成 3.5 ISO文件制作 件,只安装必须的软件,同时在封装前使用“系统总裁”圭 装_T具进行容量预估,确保封装后体积小于4.7GB,最好} 有约lG的余量,以便日后对镜像内的软件进行升级和扩充 使用EasyBoot软件可以进行启动界面的制作.为了简 化启动界面的制作过程.可以使用网络上现成的ISO镜像, 5结语 本系统恢复盘采用微软MSDN原版操作系统进行系生 封装,系统内预置了本单位所需办公软件、字库、输入法 安全防护软件等必备软件,同时简化了启动界面,操作 单易用,可广泛应用于办公计算机操作系统的快速恢复。 使用UhralSO软件将其中的BOOT文件夹提取出来,再将 适用的PE镜像、自定义的启动界面使用EasyBot软件进行 压制.将新生成的GHO文件进行替换即可完成ISO文件的 的制作。软件操作实例如图3所示。 34电 与肇
版权声明:本文标题:用VBA实现Excel电子表格汉字与拼音的转换 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1706053659h499873.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论