POI处理excel,根据XLOOKUP发现部分公式格式不支持问题

poi4不支持XLOOKUP函数,但poi最新的5.2.3却已经对此函数做了支持

poi下载地址:Index of /dist/poi/release/bin

公式源码位置:org/apache/poi/ss/formula/atp/XLookupFunction.java

但是在使用此函数过程中,发现有些XLOOKUP函数会计算不出结果,导致返回**#VALUE!**,跟踪源码分析后,发现其实是有一种特殊的excel公式写法,poi本身没有做支持

拿XLOOKUP函数举例:

此函数第二和第三个参数是数组类型,也就是说可以传入整列单元格作为参数,比如:

XLOOKUP("张三",Sheet1!A:A,Sheet1!Z:Z,"",0,1)

从A列全部寻找值为张三的,找到后返回对应的Z列区域值

如果sheet1中,我想将A列和B列拼接作为一整个列进行查询,excel公式可以这么写

XLOOKUP("张三",Sheet1!A:A&Sheet1!B:B,Sheet1!Z:Z,"",0,1)

用**&**符号将两列公式拼接组合成一列

但是poi解析一个函数的参数时,这种多列合并为一列作为参数的场景并没有特殊处理,所以解析到&符号就会被识别为字符拼接,从而导致Sheet1!A:A和Sheet1!B:B会被识别为两个单元格值,然后进行拼接,此时就会导致XLOOKUP计算失效。

不仅限于这一个函数,只要用到这种拼接公式作为参数的场景,都会存在这个bug,但由于poi一直没有对此进行支持,目前比较好的方式是调整公式,避免这种用法,可以将两列合并为一列,再用公式引用合并列。

相关推荐
卡尔特斯21 小时前
Android Kotlin 项目代理配置【详细步骤(可选)】
android·java·kotlin
白鲸开源21 小时前
Ubuntu 22 下 DolphinScheduler 3.x 伪集群部署实录
java·ubuntu·开源
ytadpole21 小时前
Java 25 新特性 更简洁、更高效、更现代
java·后端
算家计算1 天前
模糊高清修复真王炸!ComfyUI-SeedVR2-Kontext(画质修复+P图)本地部署教程
人工智能·开源·aigc
纪莫1 天前
A公司一面:类加载的过程是怎么样的? 双亲委派的优点和缺点? 产生fullGC的情况有哪些? spring的动态代理有哪些?区别是什么? 如何排查CPU使用率过高?
java·java面试⑧股
JavaGuide1 天前
JDK 25(长期支持版) 发布,新特性解读!
java·后端
用户3721574261351 天前
Java 轻松批量替换 Word 文档文字内容
java
白鲸开源1 天前
教你数分钟内创建并运行一个 DolphinScheduler Workflow!
java
weiwenhao1 天前
关于 nature 编程语言
人工智能·后端·开源
Java中文社群1 天前
有点意思!Java8后最有用新特性排行榜!
java·后端·面试