Рассчитайте формулу вниз с помощью openpyxl - PullRequest
1 голос
/ 30 января 2020

У меня есть таблица со столбцом A, содержащая даты. Я использую формулу, чтобы увидеть разницу в днях между А1 и А2, А1 и А3 и т. Д. c, используя эту формулу Excel в столбце B.

=datedif(A1,$A1$1,"D") 

При ручном перетаскивании в Excel она меняется на

=datedif(A2,$A$1,"D")

Однако мой сценарий заполняет исходную формулу по всему столбцу B, сохраняя A1 вместо перехода к A2, A3 и так далее. Вот мой сценарий.

for row in ws8.iter_rows(min_col=2, max_col=2, min_row=1):
    for cell in row:
        cell.value = '=datedif(A1,$A$1,"D")'

Ответы [ 2 ]

0 голосов
/ 31 января 2020

Вы вставляете его как строку, которая затем переводится в формулу. Я не знаю, python работает, но вам нужно указать номер строки:

howcell.value = '=datedif(A'+ row ',$A$1,"D")'
0 голосов
/ 31 января 2020

Не забудьте указать значение max_row, если вы его знаете.

ws8 = wb.active
for i,row in enumerate(ws8.iter_rows(min_col=2, max_col=2, max_row=10)):
    for cell in row:
        cell.value = f'=datedif(A{i+1},$A$1,"D")'

Для более старых версий python без строк f:

ws8 = wb.active
for i,row in enumerate(ws8.iter_rows(min_col=2, max_col=2, max_row=10)):
    for cell in row:
        cell.value = '=datedif(A{},$A$1,"D")'.format(i+1)

Выход :

Output

...