回复 10楼 sdta
好用,谢谢!
MESSAGEBOX(GetColumName(1378)) RETURN FUNCTION GetColumName(sz) LOCAL m,zm zm = "" DO WHILE sz > 0 m = sz%26 sz = INT(sz/26) IF m==0 m = 26 sz = sz-1 ENDIF zm = CHR(m+64) + zm ENDDO RETURN zm ENDFUNC
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
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