From 855b800a778b921349c784025ecb41a7ccb505d2 Mon Sep 17 00:00:00 2001 From: Looly Date: Sat, 27 Dec 2025 14:42:28 +0800 Subject: [PATCH] add test --- .../poi/excel/{ => sax}/ExcelSaxReadTest.java | 5 ++-- .../hutool/poi/excel/sax/Issue4195Test.java | 24 ++++++++++++++++++ .../src/test/resources/formula_test.xlsx | Bin 0 -> 8658 bytes 3 files changed, 26 insertions(+), 3 deletions(-) rename hutool-poi/src/test/java/cn/hutool/poi/excel/{ => sax}/ExcelSaxReadTest.java (98%) create mode 100644 hutool-poi/src/test/java/cn/hutool/poi/excel/sax/Issue4195Test.java create mode 100644 hutool-poi/src/test/resources/formula_test.xlsx diff --git a/hutool-poi/src/test/java/cn/hutool/poi/excel/ExcelSaxReadTest.java b/hutool-poi/src/test/java/cn/hutool/poi/excel/sax/ExcelSaxReadTest.java similarity index 98% rename from hutool-poi/src/test/java/cn/hutool/poi/excel/ExcelSaxReadTest.java rename to hutool-poi/src/test/java/cn/hutool/poi/excel/sax/ExcelSaxReadTest.java index 2f52c1a0eb..107fa97445 100644 --- a/hutool-poi/src/test/java/cn/hutool/poi/excel/ExcelSaxReadTest.java +++ b/hutool-poi/src/test/java/cn/hutool/poi/excel/sax/ExcelSaxReadTest.java @@ -1,4 +1,4 @@ -package cn.hutool.poi.excel; +package cn.hutool.poi.excel.sax; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; @@ -6,9 +6,8 @@ import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.lang.Console; import cn.hutool.core.util.StrUtil; +import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.cell.FormulaCellValue; -import cn.hutool.poi.excel.sax.Excel03SaxReader; -import cn.hutool.poi.excel.sax.StopReadException; import cn.hutool.poi.excel.sax.handler.RowHandler; import cn.hutool.poi.exceptions.POIException; import org.apache.poi.ss.usermodel.CellStyle; diff --git a/hutool-poi/src/test/java/cn/hutool/poi/excel/sax/Issue4195Test.java b/hutool-poi/src/test/java/cn/hutool/poi/excel/sax/Issue4195Test.java new file mode 100644 index 0000000000..cb8fe1543d --- /dev/null +++ b/hutool-poi/src/test/java/cn/hutool/poi/excel/sax/Issue4195Test.java @@ -0,0 +1,24 @@ +package cn.hutool.poi.excel.sax; + +import cn.hutool.core.lang.Console; +import cn.hutool.poi.excel.ExcelUtil; +import cn.hutool.poi.excel.cell.FormulaCellValue; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +public class Issue4195Test { + @Test + @Disabled + void saxReadFormulaTest() { + // 测试公式读取 + ExcelUtil.readBySax("formula_test.xlsx", -1, (sheetIndex, rowIndex, rowCells) -> { + final Object value = rowCells.get(2); + if(value instanceof FormulaCellValue) { + final FormulaCellValue result = ((FormulaCellValue) value); + Console.log("公式 {} 结果: {}", result.getValue(), result.getResult()); + }else{ + Console.log("非公式: {}", value.getClass()); + } + }); + } +} diff --git a/hutool-poi/src/test/resources/formula_test.xlsx b/hutool-poi/src/test/resources/formula_test.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f2251ccf0a6383d45f63f7e35713d2c19327b589 GIT binary patch literal 8658 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 LUuAx#Er9<6zyiYF literal 0 HcmV?d00001