怎么样在excel中批量把汉字姓名转换为区位码?

不知道这阿行!~

每年一度的全国普通高等学校招生报名过程中,考生都要填写报名信息卡,全体同学很紧张地查阅自己姓名中每个汉字对应的国际区位码,往往填卡时间都很紧,全班同学都抢一本区位码手册。笔者编写了一个VFP小程序,利用学校的学生信息数据库表G97.DBF,新增加区位码字段(字符型,16位),运行该程序即刻看到新增加区位码字段已经填好了,再将学号、姓名、区位码三个字段一起打印出来,用起来十分方便。

每个汉字编码方案对应有一个汉字转换程序,把它们转换成统一的机内码(即ASC码),将接收来的两个字节(国标码)在最高位加“1”,即得到内码。

国际区位码+2020H=国标码,国标码+8080H=内码,所以,国际区位码=内码-A0A0H。

每个汉字由两个字节构成,国际区位码的区码可以通过函数substr( )取汉字的前一字节(即前半个汉字)的ASC码减去160(A0H)得到,位码可以通过取汉字的后一字节的ASC码减去160(A0H)得到,如:“重”字区位码为1702,“重”字前后字节的ASC码分别为177和162,区码为 177-160=17,位码为 162-160=2。

程序由两层循环构成,外层循环从G97.DBF文件中逐条取记录,并用replace with替换命令填写“区位码”字段,内层循环逐字求出“姓名”字段的区位码,由if - endif判断语句去除“姓名”字段中的单字节字符。该程序由VFP6.0编制,做适当修改可以变为FoxBASE+程序。

*转换区位码程序清单

*创建并定义单文档窗口wn1,作为信息提示界面

define window win1 from 1,1 to 30,90 font ′楷体′,14;

style ′B′title ′信息窗口′ panel close nofloat grow nominimize zoom color b/gr+

*显示自定义窗口wn1

show window win1

*激活自定义窗口wn1

activate window win1

*打开数据库...并在窗口wn1中给出提示

if!DBUSED(〃G97〃)

set talk off

@4,4 say〃Now, the G97.DBF is being changed! 〃

@8,5 say〃Changed〃

@8,14 say〃.....〃

USE 〃D:\FOX\G97.DBF〃

&&数据库名及位置可自己调整

ENDIF

*统计当前数据库表中记录总数

n=reccount()

i=1 &&变量i是表记录循环的循环变量

do while i〈=n

@8,22 say i

qwma=〃 〃

&&记录i的〃姓名〃字段的区位码变量qwma初始化

go i

xm=TRIM(姓名)

&&去掉〃姓名〃字段的尾部空格

sL=len(xm) &&计算〃姓名〃字段的长度

j=1

do while j〈=sL

*连续取单字节子串b1,b2

b1=substr(xm,j,1)

b2=substr(xm,j+1,1)

*取子串b1,b2的机内码(即ASC码)

num1=asc(b1)

num2=asc(b2)

*判断是否为全角字符(汉字),是则计算出区码qum和位码weim

if (num1〉160) and (num2〉160) and (j〈sL)

qum=num1-160

weim=num2-160

*将区位码存入变量qwma,对qum〈10(weim〈10)情况

*数字前添0,如〃8〃变为〃08〃

do case

case(qum〉9) and (weim〉9)

qwma=qwma+〃 〃+str(qum,2)+str(weim,2)

case(qum〉9) and (weim〈=9)

qwma=qwma+〃 〃+str(qum,2)+〃0〃+str(weim,1)

case(qum〈=9) and (weim〉9)

qwma=qwma+〃 〃+〃0〃+str(qum,1)+str(weim,2)

case (qum〈=9) and (weim〈=9)

qwma=qwma+〃 〃+〃0〃+str(qum,1)+〃0〃+str(weim,1)

endcase

j=j+1 &&字节循环变量增1

endif

j=j+1 &&字节循环变量增1

enddo

replace 区位码 with qwma

&&将该记录〃区位码〃字段替换为区位码qwma

i=i+1&&下一记录

enddo

wait〃按任意键...下一步浏览或修改数据〃 window at 30,10 timeout 15

zoom window win1 max &&使窗口wn1最大化

browse &&查看数据库表

release window win1

use

return