我使用 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 and later added functions which weren’t defined in the original file specification. These functions are referred to by Microsoft as future functions. Examples of these functions are
ACOT
,CHISQ.DIST.RT
,CONFIDENCE.NORM
,STDEV.P
,STDEV.S
andWORKDAY.INTL
.
When written using
write_formula()
these functions need to be fully qualified with a_xlfn.
(or other) prefix as they are shown the list below. For example:
worksheet.write_formula('A1', '=_xlfn.STDEV.S(B1:B10)')
They will appear without the prefix in 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()
输出 :XlsxWriter 输出和 Excel 输出之间的一个区别是,它将数组公式显示为
{FILTER(...)}
。 , 带有典型的数组公式的大括号,但 Excel 没有。但是,我认为该公式按预期工作。您可以尝试在更复杂的示例中进行验证。更新 :
这个公式不同于其他 Excel 公式的原因是因为它是新的 Dynamic array functions 之一。在 Excel 365 中添加。
关于excel - XLSXWriter 和 Excel "=FILTER()"功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60838976/