描述*
想读取单元格公式, 但是只读到了手动写入的公式和 在excel中下拉自动填充的公式中的第一条
触发Bug的代码
@Override
public void invoke(Map<Integer, String> data, AnalysisContext context) {
log.info("解析到一条数据:{}", JSON.toJSONString(data));
// 有公式优先存公式
Map<Integer, Cell> cellMap = context.readRowHolder().getCellMap();
for (Map.Entry<Integer, Cell> entry : cellMap.entrySet()) {
CellData cellData = (CellData) entry.getValue();
if (cellData.getFormulaData() != null) {
data.put(entry.getKey(), cellData.getFormulaData().getFormulaValue());
}
}
.....
提示的异常或者没有达到的效果
cellData.getFormulaData() 在读到 excel中下拉自动填充的公式中的除第一条外的单元格时 为""空字符串.
com.alibaba easyexcel 3.0.5
bugtest.xlsx
附件中的25列为自动填充公式
1条答案
按热度按时间xdyibdwo1#
您好,我认为这个问题出现在 XlsxRowHandler.java 中。您可以在 ReadTest.java 中的 cellDataRead 找到相同问题。
经过测试
方法可以正确添加 tag 为 f 的值,也就是包括拖拽生成和手动输入的公式值,而
无法正确在出现 f tag 时调用,该方法仅能在手动输入和拖拽的第一个正常调用,导致read时出现空公式值。
您可以通过在excel中选中拖拽生成的单元格,只要点击过一次以后再进行读取,就可以正常读取到公式的值。
我正在尝试通过代码修复,如果您有补充请联系我
附:手动点击后生成的正常读取结果
点击前
点击单元格
点击后读取结果