如何防止将右括号附加到openpyxl

时间:2019-03-27 22:43:24

标签: python openpyxl libreoffice-calc

我试图提供一个链接,该链接将下载自动生成的电子表格,并试图使用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")

1 个答案:

答案 0 :(得分:0)

因此,该问题实际上与openpyxl没有关系。但是与LibreOffice在一起。

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

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

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