向大佬们汇报一下:
这是在发贴前,花了2天时间弄好的代码。但感觉太繁,又想不出简化的办法,所以发贴了
程序代码:
SET SAFETY OFF
CREATE TABLE CS (id n(6),zdmzm c(3))
CLOSE DATABASES
SELECT 0
USE cs ALIAS bmk
ZAP
_x=16384
FOR _i=1 TO _x
DO CASE
CASE _i<=26 &&& 一个字母标号
dygz=CHR(64+_i)
CASE _i>=27 AND _i<=702 &&& 二个字母标号
IF MOD(_i,26)=0
_zm1=CHR(64+INT(_i/26)-1)
_zm2=CHR(64+MOD(_i,26)+26)
dygz= _zm1+_zm2
ELSE
_zm1=CHR(64+INT(_i/26))
_zm2=CHR(64+MOD(_i,26))
dygz=_zm1+_zm2
ENDIF
CASE _i>=703 &&& 三个字母标号
IF MOD(_i,676)=0
_zm1=CHR(64+INT(_i/676)-1)
_zm2=CHR(64+MOD(INT(_i/26),26)+25)
_zm3=CHR(64+MOD(_i,26)+26)
dygz= _zm1+_zm2+_zm3
ELSE
IF MOD(_i,26)=0 AND MOD(INT(_i/26),26)<>0
_zm1=CHR(64+int(INT(_i/26)/26))
_zm2=CHR(64+MOD(INT(_i/26),26)-1)
_zm3=CHR(64+MOD(_i,26)+26)
IF MOD(INT(_i/26),26)=1
_zm1=CHR(64+INT(INT(_i/26)/26)-1)
_zm2=CHR(64+MOD(INT(_i/26),26)+25)
ENDIF
dygz= _zm1+_zm2+_zm3
ELSE
IF MOD(INT(_i/26),26)=0
_zm1=CHR(64+INT((_i-26)/676))
_zm2=CHR(64+MOD(INT(_i/26),26)+26)
_zm3=CHR(64+MOD(_i,26))
dygz= _zm1+_zm2+_zm3
ELSE
_zm1=CHR(64+INT((_i-26)/676))
_zm2=CHR(64+MOD(INT(_i/26),26))
_zm3=CHR(64+MOD(_i-26,26))
dygz= _zm1+_zm2+_zm3
ENDIF
ENDIF
ENDIF
OTHERWISE
ENDCASE
SELECT bmk
APPEND BLANK
REPLACE zdmzm WITH dygz
ENDFOR
SELECT bmk
REPLACE id WITH RECNO() ALL
BROWSE
RETURN
**********************
以下是根据7楼王大厨的VBA改变的,具有可读性。他的精要点在于:1、准备了26个字母的文本字符串,2、在于 减1 后再除以26再取整的思维,3、遇到整除时,用IIF切换
程序代码:
SET SAFETY OFF
PUBLIC cTXT
CREATE TABLE CS (id n(6),zdmzm c(3))
CLOSE DATABASES
SELECT 0
USE cs ALIAS bmk
ZAP
cTXT="ABCDEFGHIJKLMNOPQRSTUVWXYZ" &&& 思路决定出路,这一句定义非常重要,使得后面的代码简化了很多。
_x=16384 &&& EXCEL2007 的表共有 16384 列
FOR _i=1 TO _x
DO CASE
CASE _i<=26 &&& 一个字母标号
dygz=SUBSTR(cTXT,_i,1)
CASE _i>=27 AND _i<=702 &&& 二个字母标号
_zm1=INT((_i-1)/26) &&& 27-52,均为A,取cTXT中的第一个,为避开52/26=2,所以要 ( _i-1) / 26,整数部分
_zm2=IIF(MOD(_i,26)=0,26,MOD(_i,26)) &&& 从27-52,除以26的余数为1-25和0,0时为最后一个字母,故用IIF来转换成26。
dygz=SUBSTR(cTXT,_zm1,1)+SUBSTR(cTXT,_zm2,1)
CASE _i>=703 &&& 三个字母标号
_zm1=IIF(MOD(INT((INT((_i-1)/26)-1)/26),26)=0,26, MOD(INT((INT((_i-1)/26)-1)/26),26))
_zm2=IIF(MOD(INT((_i-1)/26),26)=0,26,MOD(INT((_i-1)/26),26))
_zm3=IIF(MOD(_i,26)=0,26,MOD(_i,26))
dygz=SUBSTR(cTXT,_zm1,1)+SUBSTR(cTXT,_zm2,1)+SUBSTR(cTXT,_zm3,1)
OTHERWISE
ENDCASE
SELECT bmk
APPEND BLANK
REPLACE zdmzm WITH dygz
ENDFOR
SELECT bmk
REPLACE id WITH RECNO() ALL
BROWSE
RETURN