Расчет формул в Excel с Python - PullRequest
1 голос
/ 12 июля 2009

Я хотел бы вставить расчет в Excel с использованием Python. Обычно это можно сделать, вставив строку формулы в соответствующую ячейку. Однако, если мне нужно вычислить формулу несколько раз для всего столбца формула должна быть обновлена ​​для каждой отдельной ячейки. Например, если мне нужно вычислите сумму двух ячеек, тогда для ячейки C (k) вычисление будет A (k) + B (k). В Excel можно рассчитать C1 = A1 + B1, а затем автоматически расширить расчет путем перетаскивания мышью от С1 вниз. Мой вопрос: возможно ли то же самое с Python, то есть определить формулу только в одной ячейке, а затем использовать возможности Excel, чтобы расширить вычисления для всего столбца / строки?

Заранее спасибо, Саша

Ответы [ 5 ]

3 голосов
/ 13 июля 2009

Как упоминает Роберто , вы можете использовать xlwt и верный цикл for:

import xlwt

w = xlwt.Workbook()
ws = w.add_sheet('mysheet')

for i in range(10):
    ws.write(i, 0, i)
    ws.write(i, 1, i+1)
    ws.write(i, 2, xlwt.Formula("$A$%d+$B$%d" % (i+1, i+1)))

w.save('myworkbook.xls')
0 голосов
/ 03 апреля 2016

Если вы хотите выполнить итерацию в xlwt для столбцов (в формулах), вы можете использовать модуль Utils из xlwt следующим образом:

from xlwt import Utils
print Utils.rowcol_pair_to_cellrange(2,2,12,2)
print Utils.rowcol_to_cell(13,2)
>>>
C3:C13
C14
0 голосов
/ 30 марта 2011

Если вы хотите выполнить итерацию в горизонтальном направлении, я использую функцию. 0 -> a, 26 -> aa, 723 -> aav

def _num_to_let(num):
        if num > 25:
            return _num_to_let(num/26-1) + chr(97+ num % 26)
        return chr(97+num)
0 голосов
/ 26 июля 2009

Саша,

Код Python, переведенный из вашего макроса, будет выглядеть так:

startCell = mySheet.Range("M6")
wholeRange = mySheet.Range("M6:M592")
startCell.FormulaR1C1 = "=R[-1]C[-7]/RC[-10]*R[-1]C"
startCell.AutoFill(Destination=wholeRange)

Не проверял, но я часто пишу это на работе. Дайте мне знать, если это не сработает.

0 голосов
/ 13 июля 2009

Если вы используете привязки COM, то вы можете просто записать макрос в Excel, а затем перевести его в код Python.
Если вы используете xlwt, вам придется прибегнуть к обычным циклам в python.

...