从列号获取Excel样式的列名

从列号获取Excel样式的列名,第1张

从列号获取Excel样式的列名

编辑:我认为我必须承认,正如其他一些人(他们从未留下过我的评论)所指出的那样,我的答案的上一版本(您接受了)存在一个错误,该错误使其无法正确处理大于

702
(对应于Excel列
'ZZ'
)。因此,为了正确起见,以下代码已对其进行了修复,该代码现在像其他许多答案一样包含一个循环。

您很可能从未使用过具有足够大列号的先前版本来遇到此问题。FWIW,当前版本的Excel的MS规范说,它支持最多包含16,384列(Excel列

'XFD'
)的工作表。

LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'def excel_style(row, col):    """ Convert given row and column number to an Excel-style cell name. """    result = []    while col:        col, rem = divmod(col-1, 26)        result[:0] = LETTERS[rem]    return ''.join(result) + str(row)if __name__ == '__main__':    addresses = [(1,  1), (1, 26),      (1, 27), (1, 52),      (1, 53), (1, 78),      (1, 79), (1, 104),      (1, 18253), (1, 18278),      (1, 702),  # -> 'ZZ1'      (1, 703),  # -> 'AAA1'      (1, 16384), # -> 'XFD1'      (1, 35277039)]    print('({:3}, {:>10}) --> {}'.format('row', 'col', 'Excel'))    print('==========================')    for row, col in addresses:        print('({:3}, {:10,}) --> {!r}'.format(row, col, excel_style(row, col)))

输出:

(row,       col) --> Excel========================(  1,         1) --> 'A1'(  1,        26) --> 'Z1'(  1,        27) --> 'AA1'(  1,        52) --> 'AZ1'(  1,        53) --> 'BA1'(  1,        78) --> 'BZ1'(  1,        79) --> 'CA1'(  1,       104) --> 'CZ1'(  1,     18253) --> 'ZZA1'(  1,     18278) --> 'ZZZ1'(  1,       702) --> 'ZZ1'(  1,       703) --> 'AAA1'(  1,     16384) --> 'XFD1'(  1,  35277039) --> 'BYEBYE1'


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5623903.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-15
下一篇2022-12-15

发表评论

登录后才能评论

评论列表(0条)

    保存