XLSXWriter и Excel "= FILTER ()" Функция? - PullRequest
1 голос
/ 24 марта 2020

Я успешно создаю множество книг Excel с использованием XLSXWriter. Теперь я пытаюсь поместить одну из новых функций Excel (начиная с 2019 года) в ячейку:

=FILTER(A19:B90,B19:B90=E19)

Когда я открываю книгу, Excel выдает следующее диалоговое окно с ошибкой:

enter image description here

Рабочая книга открывается, но вместо функции FILTER в ячейке находится «0».

Но если я вставлю точно такую ​​же функцию фильтра в та же самая ячейка вручную, она работает!

Все остальные формулы, которые я создаю, работают должным образом, и если я использую XLSXWriter, чтобы поместить функцию generi c в ту же ячейку, где я хочу, чтобы фильтр go, например =100 *5, это также работает.

Есть ли ошибка в XLSXWriter при использовании =FILTER() функций?

1 Ответ

2 голосов
/ 25 марта 2020

Это немного странно. Из документов XlsxWriter на Формулы добавлены в Excel 2010 и более поздних версиях :

Excel 2010 и более поздних добавлены функции, которые не были определены в исходной спецификации файла. Эти функции называются Microsoft как будущие функции. Примерами этих функций являются ACOT, CHISQ.DIST.RT, CONFIDENCE.NORM, STDEV.P, STDEV.S и WORKDAY.INTL.

При написании с использованием write_formula() эти функции должны быть полностью квалифицированы с помощью _xlfn. (или другой) префикс, как показано в списке ниже. Например:

worksheet.write_formula('A1', '=_xlfn.STDEV.S(B1:B10)')

Они будут появляться без префикса в Excel

Однако эта формула имеет префикс _xlfn._xlws. и также является формулой массива, поэтому вам придется сделать это:

import xlsxwriter

workbook = xlsxwriter.Workbook('test.xlsx')
worksheet = workbook.add_worksheet()

worksheet.write_array_formula('C1:D72', 
                              '=_xlfn._xlws.FILTER(A19:B90,B19:B90=E19)')

workbook.close()

Вывод :

**enter image description here**

Одно отличие между выводом XlsxWriter и Excel - что это показывает формулу массива как {FILTER(...)}, с фигурными скобками, которые являются типичными для формул массива, но Excel нет. Тем не менее, я думаю, что формула работает как задумано. Вы можете попробовать это в более сложном примере для проверки.

...