From a09dd3966b918453264a44bb7fc36fc779d2820b Mon Sep 17 00:00:00 2001 From: Husky <2466896229@qq.com> Date: Tue, 30 Aug 2022 14:43:39 +0800 Subject: [PATCH] =?UTF-8?q?#I5OSFC=20=E4=BF=AE=E5=A4=8D=EF=BC=8C=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E5=BC=82=E5=B8=B8=E4=BF=A1=E6=81=AF=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../poi/excel/reader/MapSheetReader.java | 4 +++- .../cn/hutool/poi/excel/ExcelReadTest.java | 17 +++++++++++++++++ hutool-poi/src/test/resources/read.xlsx | Bin 0 -> 9728 bytes 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 hutool-poi/src/test/resources/read.xlsx diff --git a/hutool-poi/src/main/java/cn/hutool/poi/excel/reader/MapSheetReader.java b/hutool-poi/src/main/java/cn/hutool/poi/excel/reader/MapSheetReader.java index 9a0f65d9f..ec8a2fc00 100644 --- a/hutool-poi/src/main/java/cn/hutool/poi/excel/reader/MapSheetReader.java +++ b/hutool-poi/src/main/java/cn/hutool/poi/excel/reader/MapSheetReader.java @@ -44,7 +44,9 @@ public class MapSheetReader extends AbstractSheetReader if (headerRowIndex < firstRowNum) { throw new IndexOutOfBoundsException(StrUtil.format("Header row index {} is lower than first row index {}.", headerRowIndex, firstRowNum)); } else if (headerRowIndex > lastRowNum) { - throw new IndexOutOfBoundsException(StrUtil.format("Header row index {} is greater than last row index {}.", headerRowIndex, firstRowNum)); + throw new IndexOutOfBoundsException(StrUtil.format("Header row index {} is greater than last row index {}.", headerRowIndex, lastRowNum)); + } else if (startRowIndex > lastRowNum) { + throw new IndexOutOfBoundsException(StrUtil.format("startRowIndex row index {} is greater than last row index {}.", startRowIndex, lastRowNum)); } final int startRowIndex = Math.max(this.startRowIndex, firstRowNum);// 读取起始行(包含) final int endRowIndex = Math.min(this.endRowIndex, lastRowNum);// 读取结束行(包含) diff --git a/hutool-poi/src/test/java/cn/hutool/poi/excel/ExcelReadTest.java b/hutool-poi/src/test/java/cn/hutool/poi/excel/ExcelReadTest.java index b50218aac..f88e2e236 100644 --- a/hutool-poi/src/test/java/cn/hutool/poi/excel/ExcelReadTest.java +++ b/hutool-poi/src/test/java/cn/hutool/poi/excel/ExcelReadTest.java @@ -251,4 +251,21 @@ public class ExcelReadTest { final ExcelReader reader = ExcelUtil.getReader(ResourceUtil.getStream("read_row_npe.xlsx")); reader.readColumn(0, 1); } + + @Test + public void readIssueTest() { + //https://gitee.com/dromara/hutool/issues/I5OSFC + final ExcelReader reader = ExcelUtil.getReader(ResourceUtil.getStream("read.xlsx")); + final List> read = reader.read(1,2,2); + for (Map map : read) { + Console.log(map); + } + //超出lastIndex 抛出相应提示:startRowIndex row index 4 is greater than last row index 2. + //而非:Illegal Capacity: -1 + try { + final List> readGreaterIndex = reader.read(1,4,4); + } catch (Exception e) { + Console.log(e.toString()); + } + } } diff --git a/hutool-poi/src/test/resources/read.xlsx b/hutool-poi/src/test/resources/read.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..10eda0923ba8bce554ad6ca3a6a29e319f454f35 GIT binary patch literal 9728 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 P8t5et>T@#D