我正在使用XLSXWriter成功创建许多Excel工作簿。现在,我试图将Excel的新功能(截至2019年)中的FILTER函数之一放入单元格中:
=FILTER(A19:B90,B19:B90=E19)
当我打开工作簿时,Excel会给我这个错误对话框:
打开工作簿,但是单元格中有一个“ 0”,而不是FILTER函数。
但是如果我将完全相同的过滤器功能手动粘贴到同一单元格中,它将起作用!
我正在创建的所有其他公式均按预期工作,并且如果我使用XLSXWriter将通用函数放置到我希望过滤器进入的同一单元格中,例如=100 *5
,它也可以工作。
XLSXWriter在使用=FILTER()
函数时是否存在错误?
这有点奇怪。从Formulas added in Excel 2010 and later上的XlsxWriter文档中:
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)')
但是,此公式的前缀为_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()
输出:
XlsxWriter输出和Excel的输出之间的一个区别是,这将数组公式显示为{FILTER(...)}
,并带有大括号,这是数组公式中的典型值,而Excel没有。但是,我认为该公式符合预期。您可以在更复杂的示例中进行尝试进行验证。