openpyxl возвращает значения пустой ячейки для ряда формул

Vitals: python 3.4.3 | openpyxl 2.2.3 | Excel 2013

Как все знают, вы можете использовать дескриптор заполнения Excel, чтобы быстро настроить ряд рядов по столбцу [1,2,3,4,5,6 и т. Д.], И это также работает с формулой [= sum (B1, C1), = sum (B2, C2), = sum (B3, C3) и т. д.]. Однако, когда я пытаюсь использовать openpyxl для nab-формулы, добавленной с помощью дескриптора заполнения в Excel, эти ячейки сообщаются как пустые.

Он не работал с моим исходным кодом, поэтому я создал простой скрипт, содержащий это:

for row in ws.rows: for cell in row: print('my value is:',cell.value) 

И запустил его против этого крошечного (все) файла Excel. Я использовал дескриптор заполнения A1, чтобы заполнить A2-A5 формулами. (Я просто показываю формулу для ясности, то, что я на самом деле вижу в колонке А, – это результаты.)

 # ABC 1 =SUM(B1:C1) 1 2 2 =SUM(B2:C2) 10 20 3 =SUM(B3:C3) 20 25 4 =SUM(B4:C4) 90 42 5 =SUM(B5:C5) 64 4 

Это был вывод в консоли:

 my value is: =SUM(B1:C1) my value is: 1 my value is: 2 my value is: =SUM(B2:C2) my value is: 10 my value is: 20 my value is: = my value is: 20 my value is: 25 my value is: = my value is: 90 my value is: 42 my value is: = my value is: 64 my value is: 4 

openpyxl читает формулу в A1 и A2, но не A3-A5. Я пробовал этот фрагмент против нескольких простых рядов чисел, и openpyxl не испытывал проблем с чтением этих ячеек … проблема, похоже, сводится к формулам. Мне что-то не хватает?

One Solution collect form web for “openpyxl возвращает значения пустой ячейки для ряда формул”

Обновление 3/23/16

Эта проблема была решена в последних версиях openpyxl (2.3 и выше, я считаю) PR-запрос


Это известный недостаток openpyxl ( отчет об ошибке ). Короткий ответ заключается в том, что когда вы перетаскиваете формулу вниз или наоборот, Excel использует «общую формулу», которая не может быть проанализирована openpyxl . Если вам действительно нужна эта функциональность, вы можете попробовать xlrd .


Редактировать:

Это меня раздражало, так что это очень хакерское решение (протестировано на Python 2.7). Сначала вам нужно получить синтаксический анализатор формулы Robin Macharg. Сохраните его где-нибудь на вашем пути Python как xlparse.py . Теперь запустите код из этого метода , и вы должны использовать функцию get_formula для получения формулы для любой ячейки. В большинстве случаев функция просто возвращает cell.value , но всякий раз, когда функция встречает общую формулу, она дает правильное значение.

Примечание. Параметр monkeypatch to openpyxl.reader.worksheet.Worksheet – это то, что openpyxl.load_workbook использует наш исправленный класс. Обязательно запустите этот код перед вызовом load_workbook . Если вы создаете книгу по-другому, вам нужно будет исправить Worksheet в соответствующем месте.

  • Ошибка атрибута: объект «Рабочая книга» не имеет атрибута «active»
  • Py2Exe openpyxl importerror
  • Запись многострочных строк в ячейки с помощью openpyxl
  • TypeError: объект 'generator' не подлежит расшифровке, csv-файл
  • Openpyxl отсутствует "jdcal"
  • Есть ли способ автоматической настройки ширины столбцов Excel с помощью pandas.ExcelWriter?
  • openpyxl создает функцию, которая ссылается на ячейку на другом листе
  • Django: openpyxl сохраняет книгу как вложение
  • Python - лучший язык программирования в мире.