EXCEL中如何求得单元格所在列的标题字母
用上OFFICE2007后,从第703列开始,EXCEL的列标题有3个字母组成(从 AAA 到 XFD 止,相应的单元格表示为:AAA1,AAA2,……)。在VFP对EXCEL的操作中,如:测得最后一个数据所在列为 1378,对应的列标号是 AZZ。 对应单元格就为:AZZ1,AZZ,……,AZZn,……
请问 VF 如何用 1378 转换出 AZZ 来?
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