Преобразовать букву столбца Excel или таблицы в его число в стиле Pythonic - PullRequest
9 голосов
/ 31 августа 2011

Есть ли более питонический способ преобразования столбцов в стиле Excel в числа (начиная с 1)?

Рабочий код до двух букв:

def column_to_number(c):
    """Return number corresponding to excel-style column."""
    number=-25
    for l in c:
        if not l in string.ascii_letters:
            return False
        number+=ord(l.upper())-64+25
    return number

Выполнение кода:

>>> column_to_number('2')
False
>>> column_to_number('A')
1
>>> column_to_number('AB')
28

Три буквы не работают.

>>> column_to_number('ABA')
54
>>> column_to_number('AAB')
54

Ссылка: на вопрос дан ответ на C #

Ответы [ 14 ]

0 голосов
/ 09 июля 2015

Для индекса, начинающегося с нуля (например, A = 0, B = 1 и т. Д.):

def col_to_index(col):
    A = ord('A')
    return sum(i * 26 + (ord(c) - A) for i, c in enumerate(col[::-1].upper()))
0 голосов
/ 24 апреля 2015

Изысканный и элегантный Рубин версия:

def col_num(col_name)
    col_name.split(//).inject(0) { |n, c| n * 26 + c.upcase.ord - "A".ord + 1 }
end
0 голосов
/ 06 мая 2013

просто сделайте:

print ws.Range("E2").Column

пример вызова:

from win32com import client
xl = client.Dispatch("Excel.Application")
wb = xl.Workbooks.Open("c:/somePath/file.xls")
xl.Visible = 1
ws = wb.Sheets("sheet 1")
print ws.Range("E2").Column

результат:

>>5
0 голосов
/ 01 сентября 2011

Я не уверен, что правильно понимаю, вы хотите "перевести" ссылочный код C # в python? Если это так, вы были на правильном пути; просто измените это так:

def column_to_number(c):
  """Return number corresponding to excel-style column."""
  sum = 0
  for l in c:
    if not l in string.ascii_letters:
      return False
    sum*=26
    sum+=ord(l.upper())-64
  return sum
...