Работа с эксель файлами через пайтон
Допустим есть эксель файл, в котором третья ячейка(C1) считает сумму первых двух ячеек (A1,B!). Формула задана изначально в третей ячейке (=A1+B1). Значения для первой и второй ячеек мы задаем при помощи кода на пайтон, затем извлекаем при помощи кода итоговое решение формулы т.е. (ячейку С1). Проблема в том, что пока я не открыл эксель и не сохранил его вручную (после манипуляций кодом) значения посчитанные формулой не выводятся ячейка выдает None. вот код задаёт значения в эксель:
from openpyxl import load_workbook
#ввод входящих данных
fn="Лист2.xlsx"
wb=load_workbook(fn)
ws=wb['page3']
ws['B2']=3333
ws['B3']=4444
wb.save(fn)
wb.close()
вот код выводит значение заданой ячейки:
import openpyxl
wb=openpyxl.reader.excel.load_workbook(filename="Лист2.xlsx", read_only=True,data_only=True)
# help(openpyxl.reader.excel.load_workbook)
print(wb.sheetnames)
wb.active=2
sheet=wb.active
print(sheet['B2'].value)
print(sheet['B3'].value)
print(sheet['C2'].value)
print(sheet['C3'].value)
По сути параметр data_only=True должен превращать формулу в посчитанное значение но выдаётся None потому что видимо библиотека openpyxl не может не открывая файл экселя самой программой посчитать эту формулу, только когда я вручную сохраняю, он выдает нормальные значения без None. Как решить данную проблему, уже всё перепробовал. Может быть есть библиотека в которой можно выполнить расчет формул экселя не открывая его или тому подобное? (В общем нужно чтобы эксель принимал значения для расчета формулы не открываясь считал их и выводил на консоль)
Ответы (2 шт):
Насколько я понял задачу. Я бы советовал либо сохранить файл сразу после расчётов, а потом сохранить в конце, либо всё считать в программе, а потом один раз записать в конце все данные. Не уверен, что применение "openpyxl.reader.excel" уместно, потому что заранее известно что и где находится (ячейки и данные). В экселе либо есть данные в ячейке, даже если это None, либо нет.
Нашел решение, код позволяет открыть эксель файл и сохранить его, при этом автоматически посчитаются формулы с новыми значениями (если таковые были). Данный кусок кода нужно вставить после того как мы добавили новые значения в эксель по которым посчитается формула в яйчейках которые мы можем изъять впоследствии.
import xlwings
from openpyxl import load_workbook
excel_app = xlwings.App(visible=False)
excel_book = excel_app.books.open('Лист1.xlsx')
excel_book.save()
excel_book.close()
excel_app.quit()