【问题标题】:Function that return excel column into a number? [duplicate]将excel列返回为数字的函数? [复制]
【发布时间】:2019-10-23 18:36:16
【问题描述】:

假设我在 Excel 电子表格中的位置 (AZ, 5) 有一个单元格,并且希望将列引用 AZ 转换为一个数字,例如 A -> 1, .., Z -> 26, AA -> 27 , AZ -> 52. 我该怎么做。

我的尝试似乎并不理想:

import string

di=dict(zip(string.ascii_uppercase,[ord(c)%32 for c in string.ascii_uppercase]))

def column_to_number(ref):
    if len(ref) == 1:
        number = di[ref]
    else:
        for i in ref:
            # don't know what to do here
    return number

【问题讨论】:

    标签: python


    【解决方案1】:

    试试这个单行,不需要导入:

    col = "AZ"
    col_number = sum([(ord(col.upper()[-i-1])-64)*26**i for i in range(len(col))])
    

    【讨论】:

      【解决方案2】:

      一般来说,

      x_1x_2..x_n 的数值 = x_1 的数值 * 26^(n-1) + x_2 的数值 * 26^(n-2) + ... + x_n 的数值 = x_1 的数值 * 26^(n-1) + x_2 的数值 x_3...x_n

      所以..

      import math
      def column_to_number(s):
         order_of_letter=ord(s[0])-ord('A')+1 
         if len(s)==1:
           return order_of_letter 
         else:
           return (int(math.pow(26, len(s)-1)*order_of_letter+column_to_number(s[1:])))
      

      另外,请参阅 Convert an excel or spreadsheet column letter to its number in Pythonic fashion

      【讨论】:

      • 请在您的回答中提供更多详细信息。不鼓励使用“仅代码”的答案。
      • 很明显,他们必须用我的函数代替他们的函数。您的意思是通过“提供更多细节”来“解释逻辑”吗?
      • 是的,这是一个公平的解释。社区只是不鼓励仅使用代码的答案,因为它将它们的用处仅限于原始问题。目标是尽可能创建知识库,因此解释您的代码解决问题的原因将非常有用!
      • 好的。我添加了一个解释。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-15
      • 2019-05-04
      • 1970-01-01
      • 2017-03-17
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      相关资源
      最近更新 更多