Openpyxl не может прочитать значение функции, ссылаясь на ячейку, в которую он записал ранее - PullRequest
0 голосов
/ 12 сентября 2018

У меня проблема с пакетом openpyxl. Чтобы проиллюстрировать проблему, я подготовил простой пример.

У меня есть файл Excel, который содержит только формулу =A1 в ячейке B1. Я хотел бы (1) записать значение 123 в ячейку A1, (2) сохранить рабочую книгу, (3) снова открыть ее и (4) прочитать содержимое ячейки B1. Вместо 123 я получаю None. Ниже вы можете найти простой код, который (я надеюсь) должен делать, как описано выше. Кто-нибудь может увидеть, что я делаю не так?

import openpyxl

# open file and select sheet
wb = openpyxl.load_workbook('example.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')

# write value into cell A1
sheet['A1'].value = 123

# save the file and close it
wb.save('example.xlsx')
wb.close()

# open the file again and select sheet
wb = openpyxl.load_workbook('example.xlsx', data_only=True)
sheet = wb.get_sheet_by_name('Sheet1')

# read value from cell containing referece to cell A1 => why it returns None?
print(sheet['B1'].value)

# close the file
wb.close()

Многие, спасибо

Macky

PS: я использую python 3.5.5, openpyxl 2.5.6 и MS Office 2013 на Win7.

Ответы [ 3 ]

0 голосов
/ 12 сентября 2018

Поскольку вышеприведенные комментарии не полностью отвечают на мой вопрос, я добавлю ссылку на другую дополнительную ветку .Надеюсь, это поможет другим, сталкивающимся с той же проблемой.Я не понимал, что обновленный файл Excel должен быть открыт и сохранен с помощью приложения Excel ...

С уважением,

Macky

0 голосов
/ 11 апреля 2019

Попробуйте установить для параметра «data_only» значение True при загрузке книги.

wb = load_workbook("example.xlsx", data_only=True)
print(sheet['B1'].value)

Результат будет напечатан после вычисления формулы в ячейке B1.

0 голосов
/ 12 сентября 2018

openpyxl не рассчитывает и не будет вычислять результат формул, поэтому формула B1 = A1 будет рассчитываться только при открытии листа Excel или использовании другой программы, которая будет его вычислять. Я полагаю, что могут помочь и другие библиотеки, например pycel.

...