【问题标题】:XLSXWriter and Excel "=FILTER()" Function?XLSXWriter和Excel“=FILTER()”函数?
【发布时间】:2021-03-11 15:34:20
【问题描述】:

我使用 XLSXWriter 成功地创建了许多 Excel 工作簿。现在我正在尝试将 Excel 的一个新(截至 2019 年)FILTER 函数放入一个单元格中:

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

当我打开工作簿时,Excel 给了我这个错误对话框:

工作簿打开,但单元格中出现“0”而不是 FILTER 函数。

但是如果我手动将完全相同的过滤器功能粘贴到同一个单元格中,它就可以工作!

我正在创建的所有其他公式都按预期工作,如果我使用 XLSXWriter 将通用函数放入我希望过滤器所在的同一单元格中,例如=100 *5,也可以。

XLSXWriter 在使用=FILTER() 函数时是否存在错误?

【问题讨论】:

    标签: excel excel-formula xlsxwriter


    【解决方案1】:

    这有点奇怪。来自Formulas added in Excel 2010 and later 上的 XlsxWriter 文档:

    Excel 2010 及更高版本添加了原始文件规范中未定义的功能。这些功能被 Microsoft 称为未来功能。这些函数的示例是 ACOTCHISQ.DIST.RTCONFIDENCE.NORMSTDEV.PSTDEV.SWORKDAY.INTL

    当使用write_formula() 编写时,这些函数需要使用_xlfn.(或其他)前缀完全限定,如下面的列表所示。例如:

    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 公式不同的原因在于它是 Excel 365 中新增的Dynamic array functions 之一。

    【讨论】:

    • 我遇到了同样的问题,我在检查 Excel 生成的内部 XML 后找到了这个答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 2017-03-31
    相关资源
    最近更新 更多