Сохраняйте природу формул массива при использовании openpyxl - PullRequest
0 голосов
/ 25 сентября 2018

Я работаю над книгой Excel, которая должна найти медиану всех значений столбца, где другое значение столбца - это конкретная строка, использующая openpyxl.Для этой цели я использовал сочетания MEDIAN и IF, где Ctrl + Shift + Необходимо нажать Enter , чтобы его можно было рассматривать какформула массива.

Но openpyxl не сохраняет характер формулы этого массива при сохранении файла.

Пример данных:

Values | IDS
3.5    |  1234    
2.5    |  1234    
6.5    |  5687    
7.5    |  1234    
9.5    |  1234    
1.0    |  7894

ДляПриведенные выше данные, я должен быть в состоянии найти только медиану значений, чей смежный id = 1234.

Мне нужно использовать openpyxl и поэтому мне нужна формула не массив, чтобы просмотреть список массивов с идентификаторами и найтимедианы каждого соответствующего идентификатора.

1 Ответ

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

openpyxl поддерживает ограниченный анализ формул, встроенных в ячейки.Пакет openpyxl.formula содержит класс Tokenizer для разбиения формул на составляющие их токены.Токен в формуле Excel.

Токены имеют три атрибута:

  • значение: проанализировано строковое значение, которое привело к этому токену (Фактическая формула в нашейФормула IF, как вы написали бы в Excel.)
  • тип: строка, идентифицирующая тип токена
  • подтип: строка, идентифицирующая подтип токена (необязательно, по умолчанию «»)

Ваша формула медианы. Если формула может отличаться, код ниже приведен только для справки.Он предлагает, как анализировать (или, скажем, проверять) формулы массива, используя openpyxl.Используется следующим образом:

>>> from openpyxl.formula import Tokenizer
>>> tok = Tokenizer("""{=MEDIAN(IF($B$1:$B$6="1234",$A$1:$A$6,""))}""")
>>> tok.type = Token.ARRAY
>>> tok.parse()

Обратите внимание, что openpyxl поддерживает либо формулу, либо значение формулы, которую можно выбрать с помощью флага data_only при открытии книги.Однако openpyxl не рассчитывает и не будет вычислять результат формулы.Используйте один из следующих способов для лучшего контроля над Excel в Python:

  1. pycel
  2. xlwings

Атрибуция: документация openpyxl ( Tokenizer )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...