我正在尝试提供一个下载自动生成的电子表格的链接,并尝试使用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")
所以问题实际上与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)