How to use Array Spilling with Apache POI 5.1.0(如何在Apache POI 5.1.0中使用数组溢出)
问题描述
使用Apache POI生成Excel文件,是否可以阻止Excel在公式中添加implicit intersection operator(@)? 例如,使用以下代码,我想做的是使用Excel Array Spilling behaviour将列中的所有值从A复制到K。但是,使用Excel Desktop(版本16.54)打开文件时,它会自动在公式中添加@运算符。
在工作簿sheet
工作表的单元格A1中,我得到的不是=IF(otherSheet!A:K=""; ""; otherSheet!A:K)
,而是=@IF(@otherSheet!A:K=""; ""; otherSheet!A:K)
,这不会有相同的结果,因为我只从anotherSheet
获得A1内部的值。
推荐答案
不能将Dynamic array formulas and spilled array behaviour与Apache POI 5.1.0一起使用。Excel 365版中引入了溢出数组行为。它在以前的版本中不可用。Apache POI基于随Excel2007发布的Office Open XML。因此,使用Apache POI生成的Excel文件是Excel 2007文件。
为什么添加了@
?我们什么时候将@添加到旧公式中?Implicit intersection operator: @:
一般而言,返回多单元格区域或数组的函数 如果它们是在旧版本的中创作的,则将以@为前缀 Excel。..。一个常见的例外情况是,如果它们包装在一个函数中 它接受数组或范围(例如SUM()或Average())。
因此添加了@
,因为IF
的任何参数中都不需要数组。
=IF(otherSheet!A:K="", "", otherSheet!A:K)
并使用溢出的数组行为,则生成的文件将非常大。这是因为整个列引用A:K
跨越1,048,576行。旧式阵列也是如此。一个从不应使用具有完整列引用的数组。
这篇关于如何在Apache POI 5.1.0中使用数组溢出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!