diff --git a/CHANGELOG.md b/CHANGELOG.md index d3a43fc5a..8ae3d21a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ ### Bug修复 * 【cron 】 修复CronTimer可能死循环的问题(issue#1224@Github) * 【core 】 修复Calculator.conversion单个数字越界问题(issue#1222@Github) +* 【poi 】 修复ExcelUtil.getSaxReader使用非MarkSupport流报错问题(issue#1225@Github) ------------------------------------------------------------------------------------------------------------- diff --git a/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelUtil.java b/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelUtil.java index 884746b1c..02ec4abae 100644 --- a/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelUtil.java +++ b/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelUtil.java @@ -2,6 +2,7 @@ package cn.hutool.poi.excel; import cn.hutool.core.exceptions.DependencyException; import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.StrUtil; @@ -84,6 +85,7 @@ public class ExcelUtil { * @since 3.2.0 */ public static void readBySax(InputStream in, int rid, RowHandler rowHandler) { + in = IoUtil.toMarkSupportStream(in); final ExcelSaxReader reader = ExcelSaxUtil.createSaxReader(ExcelFileUtil.isXlsx(in), rowHandler); reader.read(in, rid); } @@ -97,6 +99,7 @@ public class ExcelUtil { * @since 5.4.4 */ public static void readBySax(InputStream in, String idOrRid, RowHandler rowHandler) { + in = IoUtil.toMarkSupportStream(in); final ExcelSaxReader reader = ExcelSaxUtil.createSaxReader(ExcelFileUtil.isXlsx(in), rowHandler); reader.read(in, idOrRid); } diff --git a/hutool-poi/src/test/java/cn/hutool/poi/excel/test/ExcelSaxReadTest.java b/hutool-poi/src/test/java/cn/hutool/poi/excel/test/ExcelSaxReadTest.java index c1c70d6cc..c1319182a 100644 --- a/hutool-poi/src/test/java/cn/hutool/poi/excel/test/ExcelSaxReadTest.java +++ b/hutool-poi/src/test/java/cn/hutool/poi/excel/test/ExcelSaxReadTest.java @@ -3,6 +3,7 @@ package cn.hutool.poi.excel.test; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; 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; @@ -31,6 +32,12 @@ public class ExcelSaxReadTest { ExcelUtil.readBySax("aaa.xlsx", 0, createRowHandler()); } + @Test + public void excel07FromStreamTest() { + // issue#1225 非markSupport的流读取会错误 + ExcelUtil.readBySax(IoUtil.toStream(FileUtil.file("aaa.xlsx")), 0, createRowHandler()); + } + @Test public void excel03Test() { Excel03SaxReader reader = new Excel03SaxReader(createRowHandler());