如何防止在openpyxl中将右括号附加到我的公式中

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

我正在尝试提供一个下载自动生成的电子表格的链接,并尝试使用openpyxl来创建电子表格。除了一个小细节之外,它几乎正常工作:当我尝试使用公式作为单元格的值时,在保存的电子表格的末尾附加了一个右括号。这导致#NAME?错误。

也就是说,我使用这样的东西作为价值

"=VLOOKUP(A{}, $'lookup_table'.A1:B3, 2, 0) - B{}".format(i + 1, i + 1)

并且电子表格中的结果值就像(我用LibreOffice Calc打开它)

=VLOOKUP(A1, $'lookup_table'.A1:B3, 2, 0) - B1)

注意B1之后的额外括号。

我已经在互联网上挖了一个解决方案,但一直空着。有关如何正确制作此格式的任何指导?

最小的代码示例

from openpyxl import Workbook

wb = Workbook()
ws = wb.active

ws1 = wb.create_sheet(title="lookup_table")
lookup_table = {"one": 1, "two": 2, "three": 3}
for row, (key, value) in enumerate(lookup_table.items()):
    ws1.cell(column=1, row=row + 1, value=key)
    ws1.cell(column=2, row=row + 1, value=value)

for i, value in enumerate(["one", "two", "three"]):
    ws.cell(column=1, row=i + 1, value=value)
    ws.cell(column=2, row=i + 1, value=lookup_table[value])
    ws.cell(
        column=3,
        row=i + 1,
        value="=VLOOKUP(A{}, $'lookup_table'.A1:B3, 2, 0) - B{}".format(i + 1, i + 1),
    )


wb.save("test.xlsx")
python openpyxl libreoffice-calc
1个回答
0
投票

所以问题实际上与openpyxl无关。但与LibreOffice有关。

我查看了生成的xml文件,发现该值与预期完全一致。问题是LibreOffice Calc引用另一个工作表作为sheet2.A1,Microsoft Excel将其引用为sheet2!A1。我想,由于工作表被保存为.xlsx,因此使用Excel格式是有意义的。

"=VLOOKUP(A{}, $'lookup_table'.A1:B3, 2, 0) - B{}".format(i + 1, i + 1)更新字符串后,该文件现在可以在Microsoft Excel和LibreOffice Calc中正确打开

"=VLOOKUP(A{}, 'lookup_table'!A1:B3, 2, 0) - B{}".format(i + 1, i + 1)

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