// (1) 用自然数n除以26,得到余数m。若m=0,令m=26。
// (2) 将m映射到26个字母上(1==‘A’,…,26==‘z’),前置拼接字符串。
// (3) 用自然数n减去m,得到新的n,重复(1)-(3)至n=0。
QString intToStringBy26Base(int column)
{
QString colName;
while (column > 0)
{
int a = column%26;
if (a == 0)
a = 26;
column = (column - a)/26;
colName.prepend(QChar(a + 64));
}
return colName;
}
// (1) 对于有n个字母组成的字符串,顺序取出(此处由右至至)字符串str每一位的字母x
// (2) 将字母x映射到对应的数字a,乘以对应的基幂数,如右起第一位为26的零
// 次幂,第二位为26的一次幂,依此类推。得到每一位实际对应的数m。
// (3) 将m依次累加,得到最终的十进制数。
int stringToIntBy26Base(QString colName)
{
int column = 0;
int strLen = colName.length();
for (int i=0,j=1; i<strLen; i++,j*=26)
{
int temp = (int)(colName.toUpper().at(strLen - 1 - i).toLatin1() - 64);
column = column + temp * j;
}
return column;
}