Openpyxl получает значение ячейки (для ячеек с формулой, без формулы или с указанием даты и времени) - PullRequest
1 голос
/ 18 апреля 2020

У меня есть таблица с ячейками, содержащими текст без формул, с формулами и с форматом datetime. Мне нужно прочитать фактическое значение для всех этих трех случаев.

Использование Python 3 с Openpyxl 3.0.3.

В настоящее время у меня есть следующий код. Использование data_only=True, как предложено в других сообщениях SO об этой проблеме.

workbook = load_workbook(r"path\to\my\spreadsheet.xlsx", data_only=True)
# select first available sheet
sheet = workbook.active
sheet.title

for value in sheet.iter_rows(min_row=2,
                             max_row=86,
                             min_col=1,
                             max_col=7,
                             values_only=True):
     print(value)

Фрагмент полученного результата показан ниже. В этом примере первый столбец в порядке. Третий столбец отформатирован по дате, но мне нужно фактическое значение ячейки (чтобы они были 26/1/2020 и 27/1/2020). В пятом и шестом столбцах есть формулы, но мне нужно фактическое значение.

(2, None, datetime.datetime(2020, 1, 26, 0, 0), None, '=SUM(D$3:D4)', '=E4/E3', None)
(3, None, datetime.datetime(2020, 1, 27, 0, 0), None, '=SUM(D$3:D5)', '=E5/E4', None)

1 Ответ

1 голос
/ 18 апреля 2020

Третий столбец отформатирован по дате, но мне нужно фактическое значение ячейки (чтобы они были 26/1/2020 и 27/1/2020)
Что касается форматирования там это опция strfomart
из модуля даты и времени в python

from datetime import datetime
value[2].strformat("%d/%m/%Y)

Не могли бы вы подтвердить, что значения импортируются, а не формулы в первую очередь, как это сделано здесь

print(sheet["a1"].value)

Редактировать Я создал тестовый файл Excel с тремя столбцами
enter image description here

Что странного в том, что он возвращает правильный вывод в вашем для l oop .
Вывод

(1, 5, 6)
(2, 7, 9)
(3, 9, 12)
(4, 11, 15)

Я нашел следующий комментарий ( source )

FWIW, как описано в openpyxl.load_workbook (), значение, которое вы получаете при открытии рабочей книги с data_only = True - это «значение, сохраненное в последний раз, когда Excel читал лист». Это зависит от функции кэширования файлов .xls [x / m / ...] (о которых я нахожу документацию везде, кроме Microsoft). - user948581

Возможно, попробуйте открыть файл, проверьте, правильно ли рассчитаны формулы (отображаются в виде значения в ячейке), а затем сохраните файл и убедитесь, что он закрыт.

...