Как предотвратить добавление закрывающей скобки к моей формуле в openpyxl - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь предоставить ссылку для загрузки автоматически созданной электронной таблицы и пытаюсь использовать 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 голосов
/ 28 марта 2019

Так что проблема на самом деле не имеет ничего общего с 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)

...