通过 python (Openpyxl) 扩展 Excel 中的公式

问题描述 投票:0回答:1

我一直在尝试将自动化写入我的Excel文件,除此之外还学习一些Python。我正在使用 openpyxl。当我想将公式从一个单元格扩展到多行和列中的另一个单元格时,我遇到了问题。

例如 We've got here 4 rows of numbers in 3 columns. In cells D2,E2,F2,G2 I have some basic formulas Sum

我尝试了很多可能性,多次重写代码,但仍然无法得到解决。 openpyxl 的文档非常差,不能回答我的问题。

我最近尝试过的一些事情:

ws1
是工作表的名称

for row in ws1.iter_cols(min_col= 4, min_row = 2, max_row = ws1.max_row, max_col = ws1.max_column):
    formula = row[0].value
    for cell in row:
        cell = row[0]
        cell_coordinate = cell.coordinate 
        str(cell_coordinate)
        cell.value = Translator(formula,origin = cell_coordinate ).translate_formula()

我知道这可能是错误的,但我不知道如何修复它。

感谢帮助。

python excel openpyxl
1个回答
0
投票

主要问题是您使用当前单元格的

coordinate
作为
Translator
的原点。

你可以这样修复它:

from openpyxl import load_workbook
from openpyxl.formula.translate import Translator

wb = load_workbook("book.xlsx")
ws = wb.active # or wb["SheetName"]

SR, SC = 2, 4

d = {
    "sum": ("=SUM(A2:C2)", "D2"),
    "multiply": ("=PRODUCT(A2:C2)", "E2"),
    "divide": ("=A2/B2/C2", "F2"),
    "average": ("=AVERAGE(A2:C2)", "G2")
}

for col, agg in zip(ws.iter_cols(min_row=SR, min_col=SC), d):
    for idx, cell in enumerate(col):
        cell.value = Translator(
            *d.get(agg)
        ).translate_formula(cell.coordinate)

wb.save("file.xlsx") # this is an inplace modification

输出(文件.xlsx):

© www.soinside.com 2019 - 2024. All rights reserved.