当前位置: 首页 > 面试题库 >

从列号获取Excel样式的列名

王嘉木
2023-03-14
问题内容

这是用于提供行和列ID时提供COLUMN名称的代码,但是当我提供like值时row = 1 and col = 104,它应该返回CZ,但返回D@

row = 1
col = 104
div = col
column_label = str()
while div:
    (div, mod) = divmod(div, 26)
    column_label = chr(mod + 64) + column_label

print column_label

我在做什么错了?

(此代码是EXCEL列的参考,在这里我提供了Row,Column ID值,并期望相同的ALPHABETIC值。)


问题答案:

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


 类似资料:
  • 问题内容: 我想阅读给应用于xlsx文档中单元格的样式的名称。我已经提取了文件,并且在xl / styles.xml中可以找到样式名称: 我想要的样式名称是“测试样式”。目前,我有以下代码,并且我可以获取xfId而不是名称: 有谁知道我是否可以用poi获得样式名称,以及我将如何进行? 如果这不可能,那么我可以基于xfId将背景颜色设为rgb吗? 问候 问题答案: 经过大量的挖掘,我找到了解决方案。

  • 我想要获取与列名相关的列值,如在policy no string中获取TXT_Policy_no等,因为excel工作表的值可以满足要求,所以我想要读取基于列名的值,以更加安全。 我的java代码:

  • 我想从excel表格中读取一组用户名和密码。我的用户名出现在第一列,但我的密码值出现在第8列。我不想通过给出第8列地址来读取第8列的值。相反,我想在excel工作表中的任何地方读取密码值。有什么办法可以做到这一点吗? FileInputStream fs=new FileInputStream(strReadFile); 工作簿wb=Workbook.getWorkbook fs; 工作簿sh=w

  • 我正在尝试将我的VLOOKUP自动化为每周更新的数据表。目前我的VLOOKUP如下所示: 每周向表中插入两个新列(在最后一列之前)。新列中填充了新数据,我必须重新编写我的VLOOKUP。 我正在查找的列始终是倒数第三列、倒数第二列和倒数第三列。 有没有一种方法可以通过查找倒数第三、倒数第二和倒数第三列的函数来指定列索引号?我想这样我可以添加一个宏来完成这项工作。

  • 问题内容: 为了进行一些统计分析,我需要在Excel工作表的列中提取值。我一直在使用Apache POI包从Excel文件中读取数据,当需要迭代行时,它可以很好地工作。但是我找不到关于在API(链接文本)或通过Google搜索获取列的任何信息。 由于我需要获取不同列的最大值和最小值并使用这些值生成随机数,因此,无需选择单个列,唯一的选择是遍历行和列以获取值并一一比较。听起来不那么省时。 关于如何解

  • 在R中,当需要根据可以执行的列名称检索列索引时 有没有一种方法可以对熊猫数据帧执行相同的操作?