From 88de089c1068cf4f92c4b419bf0bb8494e6c8f6f Mon Sep 17 00:00:00 2001 From: Jiaju Zhuang Date: Thu, 2 Jan 2020 21:30:47 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E5=A1=AB=E5=85=85=E6=97=B6=E5=80=99?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=A0=B9=E6=8D=AE`sheetName`=E5=AE=9A?= =?UTF-8?q?=E4=BD=8D`sheet`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../v07/handlers/DefaultCellHandler.java | 6 +- .../handlers/ProcessResultCellHandler.java | 5 +- .../excel/context/WriteContextImpl.java | 68 +++++++++++------- .../com/alibaba/excel/util/PositionUtils.java | 25 +++++++ .../metadata/holder/WriteSheetHolder.java | 6 +- .../metadata/holder/WriteWorkbookHolder.java | 25 +++++-- .../test/core/fill/FillDataTest.java | 25 +++++++ src/test/resources/fill/byName.xls | Bin 0 -> 28160 bytes src/test/resources/fill/byName.xlsx | Bin 0 -> 11489 bytes update.md | 4 ++ 11 files changed, 126 insertions(+), 40 deletions(-) create mode 100644 src/test/resources/fill/byName.xls create mode 100644 src/test/resources/fill/byName.xlsx diff --git a/pom.xml b/pom.xml index 415b45a8..844f70c4 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.alibaba easyexcel - 2.1.4 + 2.1.5 jar easyexcel diff --git a/src/main/java/com/alibaba/excel/analysis/v07/handlers/DefaultCellHandler.java b/src/main/java/com/alibaba/excel/analysis/v07/handlers/DefaultCellHandler.java index e0b9c413..e53c3cca 100644 --- a/src/main/java/com/alibaba/excel/analysis/v07/handlers/DefaultCellHandler.java +++ b/src/main/java/com/alibaba/excel/analysis/v07/handlers/DefaultCellHandler.java @@ -36,7 +36,7 @@ import com.alibaba.excel.util.PositionUtils; public class DefaultCellHandler implements XlsxCellHandler, XlsxRowResultHolder { private final AnalysisContext analysisContext; private Deque currentTagDeque = new LinkedList(); - private int curCol; + private int curCol = -1; private Map curRowContent = new LinkedHashMap(); private CellData currentCellData; private StringBuilder dataStringBuilder; @@ -55,6 +55,7 @@ public class DefaultCellHandler implements XlsxCellHandler, XlsxRowResultHolder @Override public void clearResult() { curRowContent = new LinkedHashMap(); + curCol=-1; } @Override @@ -68,7 +69,8 @@ public class DefaultCellHandler implements XlsxCellHandler, XlsxRowResultHolder currentTagDeque.push(name); // start a cell if (CELL_TAG.equals(name)) { - curCol = PositionUtils.getCol(attributes.getValue(ExcelXmlConstants.POSITION)); + curCol = PositionUtils.getCol(attributes.getValue(ExcelXmlConstants.POSITION),curCol); + // t="s" ,it's means String // t="str" ,it's means String,but does not need to be read in the 'sharedStrings.xml' diff --git a/src/main/java/com/alibaba/excel/analysis/v07/handlers/ProcessResultCellHandler.java b/src/main/java/com/alibaba/excel/analysis/v07/handlers/ProcessResultCellHandler.java index 95816463..c8542428 100644 --- a/src/main/java/com/alibaba/excel/analysis/v07/handlers/ProcessResultCellHandler.java +++ b/src/main/java/com/alibaba/excel/analysis/v07/handlers/ProcessResultCellHandler.java @@ -20,6 +20,7 @@ import com.alibaba.excel.util.PositionUtils; public class ProcessResultCellHandler implements XlsxCellHandler { private AnalysisContext analysisContext; private XlsxRowResultHolder rowResultHandler; + private int currentRow = -1; public ProcessResultCellHandler(AnalysisContext analysisContext, XlsxRowResultHolder rowResultHandler) { this.analysisContext = analysisContext; @@ -33,9 +34,9 @@ public class ProcessResultCellHandler implements XlsxCellHandler { @Override public void startHandle(String name, Attributes attributes) { + currentRow = PositionUtils.getRowByRowTagt(attributes.getValue(ExcelXmlConstants.POSITION),currentRow); analysisContext.readRowHolder( - new ReadRowHolder(PositionUtils.getRowByRowTagt(attributes.getValue(ExcelXmlConstants.POSITION)), - analysisContext.readSheetHolder().getGlobalConfiguration())); + new ReadRowHolder(currentRow, analysisContext.readSheetHolder().getGlobalConfiguration())); } @Override diff --git a/src/main/java/com/alibaba/excel/context/WriteContextImpl.java b/src/main/java/com/alibaba/excel/context/WriteContextImpl.java index a07ad4ce..890bef21 100644 --- a/src/main/java/com/alibaba/excel/context/WriteContextImpl.java +++ b/src/main/java/com/alibaba/excel/context/WriteContextImpl.java @@ -103,37 +103,44 @@ public class WriteContextImpl implements WriteContext { */ @Override public void currentSheet(WriteSheet writeSheet, WriteTypeEnum writeType) { - if (writeSheet == null) { - throw new IllegalArgumentException("Sheet argument cannot be null"); + boolean illegalArgument = + writeSheet == null || (writeSheet.getSheetNo() == null && StringUtils.isEmpty(writeSheet.getSheetName())); + if (illegalArgument) { + throw new IllegalArgumentException("Sheet name and Sheet number can not be empty."); } - if (writeSheet.getSheetNo() == null || writeSheet.getSheetNo() <= 0) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Sheet number is null"); - } - writeSheet.setSheetNo(0); - } - if (writeWorkbookHolder.getHasBeenInitializedSheet().containsKey(writeSheet.getSheetNo())) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Sheet:{} is already existed", writeSheet.getSheetNo()); - } - writeSheetHolder = writeWorkbookHolder.getHasBeenInitializedSheet().get(writeSheet.getSheetNo()); - writeSheetHolder.setNewInitialization(Boolean.FALSE); - writeTableHolder = null; - currentWriteHolder = writeSheetHolder; - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("CurrentConfiguration is writeSheetHolder"); - } + if (selectSheetFromCache(writeSheet)) { return; } initCurrentSheetHolder(writeSheet); - WriteHandlerUtils.beforeSheetCreate(this); // Initialization current sheet initSheet(writeType); } + private boolean selectSheetFromCache(WriteSheet writeSheet) { + writeSheetHolder = null; + if (writeSheet.getSheetNo() != null) { + writeSheetHolder = writeWorkbookHolder.getHasBeenInitializedSheetIndexMap().get(writeSheet.getSheetNo()); + } + if (writeSheetHolder == null && !StringUtils.isEmpty(writeSheet.getSheetName())) { + writeSheetHolder = writeWorkbookHolder.getHasBeenInitializedSheetNameMap().get(writeSheet.getSheetName()); + } + if (writeSheetHolder == null) { + return false; + } + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("Sheet:{} is already existed", writeSheet.getSheetNo()); + } + writeSheetHolder.setNewInitialization(Boolean.FALSE); + writeTableHolder = null; + currentWriteHolder = writeSheetHolder; + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("CurrentConfiguration is writeSheetHolder"); + } + return true; + } + private void initCurrentSheetHolder(WriteSheet writeSheet) { writeSheetHolder = new WriteSheetHolder(writeSheet, writeWorkbookHolder); - writeWorkbookHolder.getHasBeenInitializedSheet().put(writeSheet.getSheetNo(), writeSheetHolder); writeTableHolder = null; currentWriteHolder = writeSheetHolder; if (LOGGER.isDebugEnabled()) { @@ -142,15 +149,26 @@ public class WriteContextImpl implements WriteContext { } private void initSheet(WriteTypeEnum writeType) { + WriteHandlerUtils.beforeSheetCreate(this); Sheet currentSheet; try { - currentSheet = writeWorkbookHolder.getWorkbook().getSheetAt(writeSheetHolder.getSheetNo()); - writeSheetHolder - .setCachedSheet(writeWorkbookHolder.getCachedWorkbook().getSheetAt(writeSheetHolder.getSheetNo())); + if (writeSheetHolder.getSheetNo() != null) { + currentSheet = writeWorkbookHolder.getWorkbook().getSheetAt(writeSheetHolder.getSheetNo()); + writeSheetHolder + .setCachedSheet(writeWorkbookHolder.getCachedWorkbook().getSheetAt(writeSheetHolder.getSheetNo())); + } else { + // sheet name must not null + currentSheet = writeWorkbookHolder.getWorkbook().getSheet(writeSheetHolder.getSheetName()); + writeSheetHolder + .setCachedSheet(writeWorkbookHolder.getCachedWorkbook().getSheet(writeSheetHolder.getSheetName())); + } } catch (Exception e) { if (LOGGER.isDebugEnabled()) { LOGGER.debug("Can not find sheet:{} ,now create it", writeSheetHolder.getSheetNo()); } + if (StringUtils.isEmpty(writeSheetHolder.getSheetName())) { + writeSheetHolder.setSheetName(writeSheetHolder.getSheetNo().toString()); + } currentSheet = WorkBookUtil.createSheet(writeWorkbookHolder.getWorkbook(), writeSheetHolder.getSheetName()); writeSheetHolder.setCachedSheet(currentSheet); } @@ -160,6 +178,8 @@ public class WriteContextImpl implements WriteContext { // Initialization head initHead(writeSheetHolder.excelWriteHeadProperty()); } + writeWorkbookHolder.getHasBeenInitializedSheetIndexMap().put(writeSheetHolder.getSheetNo(), writeSheetHolder); + writeWorkbookHolder.getHasBeenInitializedSheetNameMap().put(writeSheetHolder.getSheetName(), writeSheetHolder); } public void initHead(ExcelWriteHeadProperty excelWriteHeadProperty) { diff --git a/src/main/java/com/alibaba/excel/util/PositionUtils.java b/src/main/java/com/alibaba/excel/util/PositionUtils.java index f135e473..b85018f9 100644 --- a/src/main/java/com/alibaba/excel/util/PositionUtils.java +++ b/src/main/java/com/alibaba/excel/util/PositionUtils.java @@ -14,6 +14,16 @@ public class PositionUtils { } return row; } + public static int getRowByRowTagt(String rowTagt,int before) { + int row ; + if (rowTagt != null) { + row = Integer.parseInt(rowTagt) - 1; + return row; + }else { + return before + 1; + } + + } public static int getRow(String currentCellIndex) { int row = 0; @@ -35,4 +45,19 @@ public class PositionUtils { } return col - 1; } + + public static int getCol(String currentCellIndex,int before) { + int col = 0; + if (currentCellIndex != null) { + + char[] currentIndex = currentCellIndex.replaceAll("[0-9]", "").toCharArray(); + for (int i = 0; i < currentIndex.length; i++) { + col += (currentIndex[i] - '@') * Math.pow(26, (currentIndex.length - i - 1)); + } + return col - 1; + }else { + return before +1; + } + } + } diff --git a/src/main/java/com/alibaba/excel/write/metadata/holder/WriteSheetHolder.java b/src/main/java/com/alibaba/excel/write/metadata/holder/WriteSheetHolder.java index 90030f4f..b74db290 100644 --- a/src/main/java/com/alibaba/excel/write/metadata/holder/WriteSheetHolder.java +++ b/src/main/java/com/alibaba/excel/write/metadata/holder/WriteSheetHolder.java @@ -68,11 +68,7 @@ public class WriteSheetHolder extends AbstractWriteHolder { super(writeSheet, writeWorkbookHolder, writeWorkbookHolder.getWriteWorkbook().getConvertAllFiled()); this.writeSheet = writeSheet; this.sheetNo = writeSheet.getSheetNo(); - if (writeSheet.getSheetName() == null) { - this.sheetName = writeSheet.getSheetNo().toString(); - } else { - this.sheetName = writeSheet.getSheetName(); - } + this.sheetName = writeSheet.getSheetName(); this.parentWriteWorkbookHolder = writeWorkbookHolder; this.hasBeenInitializedTable = new HashMap(); if (writeWorkbookHolder.getTempTemplateInputStream() != null) { diff --git a/src/main/java/com/alibaba/excel/write/metadata/holder/WriteWorkbookHolder.java b/src/main/java/com/alibaba/excel/write/metadata/holder/WriteWorkbookHolder.java index c8f7555f..be557ebd 100644 --- a/src/main/java/com/alibaba/excel/write/metadata/holder/WriteWorkbookHolder.java +++ b/src/main/java/com/alibaba/excel/write/metadata/holder/WriteWorkbookHolder.java @@ -92,7 +92,11 @@ public class WriteWorkbookHolder extends AbstractWriteHolder { /** * prevent duplicate creation of sheet objects */ - private Map hasBeenInitializedSheet; + private Map hasBeenInitializedSheetIndexMap; + /** + * prevent duplicate creation of sheet objects + */ + private Map hasBeenInitializedSheetNameMap; /** * Whether the encryption */ @@ -148,7 +152,8 @@ public class WriteWorkbookHolder extends AbstractWriteHolder { } else { this.mandatoryUseInputStream = writeWorkbook.getMandatoryUseInputStream(); } - this.hasBeenInitializedSheet = new HashMap(); + this.hasBeenInitializedSheetIndexMap = new HashMap(); + this.hasBeenInitializedSheetNameMap = new HashMap(); this.password = writeWorkbook.getPassword(); if (writeWorkbook.getInMemory() == null) { this.inMemory = Boolean.FALSE; @@ -197,12 +202,20 @@ public class WriteWorkbookHolder extends AbstractWriteHolder { this.cachedWorkbook = cachedWorkbook; } - public Map getHasBeenInitializedSheet() { - return hasBeenInitializedSheet; + public Map getHasBeenInitializedSheetIndexMap() { + return hasBeenInitializedSheetIndexMap; + } + + public void setHasBeenInitializedSheetIndexMap(Map hasBeenInitializedSheetIndexMap) { + this.hasBeenInitializedSheetIndexMap = hasBeenInitializedSheetIndexMap; + } + + public Map getHasBeenInitializedSheetNameMap() { + return hasBeenInitializedSheetNameMap; } - public void setHasBeenInitializedSheet(Map hasBeenInitializedSheet) { - this.hasBeenInitializedSheet = hasBeenInitializedSheet; + public void setHasBeenInitializedSheetNameMap(Map hasBeenInitializedSheetNameMap) { + this.hasBeenInitializedSheetNameMap = hasBeenInitializedSheetNameMap; } public WriteWorkbook getWriteWorkbook() { diff --git a/src/test/java/com/alibaba/easyexcel/test/core/fill/FillDataTest.java b/src/test/java/com/alibaba/easyexcel/test/core/fill/FillDataTest.java index 04a8bd1e..fe021633 100644 --- a/src/test/java/com/alibaba/easyexcel/test/core/fill/FillDataTest.java +++ b/src/test/java/com/alibaba/easyexcel/test/core/fill/FillDataTest.java @@ -39,6 +39,10 @@ public class FillDataTest { private static File horizontalFillTemplate07; private static File fileHorizontal03; private static File horizontalFillTemplate03; + private static File byName07; + private static File byName03; + private static File byNameTemplate07; + private static File byNameTemplate03; @BeforeClass public static void init() { @@ -54,6 +58,10 @@ public class FillDataTest { horizontalFillTemplate07 = TestFileUtil.readFile("fill" + File.separator + "horizontal.xlsx"); fileHorizontal03 = TestFileUtil.createNewFile("fillHorizontal03.xls"); horizontalFillTemplate03 = TestFileUtil.readFile("fill" + File.separator + "horizontal.xls"); + byName07 = TestFileUtil.createNewFile("byName07.xlsx"); + byNameTemplate07 = TestFileUtil.readFile("fill" + File.separator + "byName.xlsx"); + byName03 = TestFileUtil.createNewFile("byName03.xls"); + byNameTemplate03 = TestFileUtil.readFile("fill" + File.separator + "byName.xls"); } @Test @@ -86,6 +94,23 @@ public class FillDataTest { horizontalFill(fileHorizontal03, horizontalFillTemplate03); } + @Test + public void t07ByNameFill07() { + byNameFill(byName07, byNameTemplate07); + } + + @Test + public void t08ByNameFill03() { + byNameFill(byName03, byNameTemplate03); + } + + private void byNameFill(File file, File template) { + FillData fillData = new FillData(); + fillData.setName("张三"); + fillData.setNumber(5.2); + EasyExcel.write(file, FillData.class).withTemplate(template).sheet("Sheet2").doFill(fillData); + } + private void horizontalFill(File file, File template) { ExcelWriter excelWriter = EasyExcel.write(file).withTemplate(template).build(); WriteSheet writeSheet = EasyExcel.writerSheet().build(); diff --git a/src/test/resources/fill/byName.xls b/src/test/resources/fill/byName.xls new file mode 100644 index 0000000000000000000000000000000000000000..e07fd503eea2a3a933f7413e1486bdcc569e6a00 GIT binary patch literal 28160 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 ARsaA1 literal 0 HcmV?d00001 diff --git a/src/test/resources/fill/byName.xlsx b/src/test/resources/fill/byName.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..327e0557ac60ccee12309a7c44c2659436dad2ed GIT binary patch literal 11489 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 a{*_4NrJ+HD`Z Date: Thu, 2 Jan 2020 21:49:28 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E5=A1=AB=E5=85=85=E6=97=B6=E5=80=99?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=A0=B9=E6=8D=AE`sheetName`=E5=AE=9A?= =?UTF-8?q?=E4=BD=8D`sheet`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/alibaba/excel/context/WriteContextImpl.java | 6 ++---- .../excel/write/metadata/holder/WriteSheetHolder.java | 7 ++++++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/alibaba/excel/context/WriteContextImpl.java b/src/main/java/com/alibaba/excel/context/WriteContextImpl.java index 890bef21..df4840d0 100644 --- a/src/main/java/com/alibaba/excel/context/WriteContextImpl.java +++ b/src/main/java/com/alibaba/excel/context/WriteContextImpl.java @@ -103,10 +103,8 @@ public class WriteContextImpl implements WriteContext { */ @Override public void currentSheet(WriteSheet writeSheet, WriteTypeEnum writeType) { - boolean illegalArgument = - writeSheet == null || (writeSheet.getSheetNo() == null && StringUtils.isEmpty(writeSheet.getSheetName())); - if (illegalArgument) { - throw new IllegalArgumentException("Sheet name and Sheet number can not be empty."); + if (writeSheet == null) { + throw new IllegalArgumentException("Sheet argument cannot be null"); } if (selectSheetFromCache(writeSheet)) { return; diff --git a/src/main/java/com/alibaba/excel/write/metadata/holder/WriteSheetHolder.java b/src/main/java/com/alibaba/excel/write/metadata/holder/WriteSheetHolder.java index b74db290..56fc7e4e 100644 --- a/src/main/java/com/alibaba/excel/write/metadata/holder/WriteSheetHolder.java +++ b/src/main/java/com/alibaba/excel/write/metadata/holder/WriteSheetHolder.java @@ -10,6 +10,7 @@ import org.apache.poi.xssf.usermodel.XSSFSheet; import com.alibaba.excel.enums.HolderEnum; import com.alibaba.excel.enums.WriteLastRowTypeEnum; +import com.alibaba.excel.util.StringUtils; import com.alibaba.excel.write.metadata.WriteSheet; /** @@ -67,7 +68,11 @@ public class WriteSheetHolder extends AbstractWriteHolder { public WriteSheetHolder(WriteSheet writeSheet, WriteWorkbookHolder writeWorkbookHolder) { super(writeSheet, writeWorkbookHolder, writeWorkbookHolder.getWriteWorkbook().getConvertAllFiled()); this.writeSheet = writeSheet; - this.sheetNo = writeSheet.getSheetNo(); + if (writeSheet.getSheetNo() == null && StringUtils.isEmpty(writeSheet.getSheetName())) { + this.sheetNo = 0; + } else { + this.sheetNo = writeSheet.getSheetNo(); + } this.sheetName = writeSheet.getSheetName(); this.parentWriteWorkbookHolder = writeWorkbookHolder; this.hasBeenInitializedTable = new HashMap(); From c6f21608abaf933b880e180a4ed6ee6c1d3f7109 Mon Sep 17 00:00:00 2001 From: Jiaju Zhuang Date: Fri, 3 Jan 2020 20:08:18 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=A1=AB=E5=85=85?= =?UTF-8?q?=E5=8F=AA=E6=9C=89`sheetName`=E4=BC=9A=E6=8A=9B=E5=BC=82?= =?UTF-8?q?=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + pom.xml | 2 +- .../excel/context/WriteContextImpl.java | 25 +++++++++++++------ update.md | 3 +++ 4 files changed, 22 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 1251ebd2..b142b9dd 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ easyexcel [QQ群: 662022184](//shang.qq.com/wpa/qunwpa?idkey=53d9d821b0833e3c14670f007488a61e300f00ff4f1b81fd950590d90dd80f80) [钉钉群: 21960511](https://qr.dingtalk.com/action/joingroup?code=v1,k1,cchz6k12ci9B08NNqhNRFGXocNVHrZtW0kaOtTKg/Rk=&_dt_no_comment=1&origin=11) [官方网站: https://alibaba-easyexcel.github.io/](https://alibaba-easyexcel.github.io/) +#### 因为公司不方便用QQ,所以建议加钉钉群 # JAVA解析Excel工具easyexcel Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi对07版Excel的解析,能够原本一个3M的excel用POI sax依然需要100M左右内存降低到几M,并且再大的excel不会出现内存溢出,03版依赖POI的sax模式。在上层做了模型转换的封装,让使用者更加简单方便 diff --git a/pom.xml b/pom.xml index 844f70c4..fe46977f 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.alibaba easyexcel - 2.1.5 + 2.1.6 jar easyexcel diff --git a/src/main/java/com/alibaba/excel/context/WriteContextImpl.java b/src/main/java/com/alibaba/excel/context/WriteContextImpl.java index df4840d0..e79453c7 100644 --- a/src/main/java/com/alibaba/excel/context/WriteContextImpl.java +++ b/src/main/java/com/alibaba/excel/context/WriteContextImpl.java @@ -161,14 +161,10 @@ public class WriteContextImpl implements WriteContext { .setCachedSheet(writeWorkbookHolder.getCachedWorkbook().getSheet(writeSheetHolder.getSheetName())); } } catch (Exception e) { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Can not find sheet:{} ,now create it", writeSheetHolder.getSheetNo()); - } - if (StringUtils.isEmpty(writeSheetHolder.getSheetName())) { - writeSheetHolder.setSheetName(writeSheetHolder.getSheetNo().toString()); - } - currentSheet = WorkBookUtil.createSheet(writeWorkbookHolder.getWorkbook(), writeSheetHolder.getSheetName()); - writeSheetHolder.setCachedSheet(currentSheet); + currentSheet = createSheet(); + } + if (currentSheet == null) { + currentSheet = createSheet(); } writeSheetHolder.setSheet(currentSheet); WriteHandlerUtils.afterSheetCreate(this); @@ -180,6 +176,19 @@ public class WriteContextImpl implements WriteContext { writeWorkbookHolder.getHasBeenInitializedSheetNameMap().put(writeSheetHolder.getSheetName(), writeSheetHolder); } + private Sheet createSheet() { + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("Can not find sheet:{} ,now create it", writeSheetHolder.getSheetNo()); + } + if (StringUtils.isEmpty(writeSheetHolder.getSheetName())) { + writeSheetHolder.setSheetName(writeSheetHolder.getSheetNo().toString()); + } + Sheet currentSheet = + WorkBookUtil.createSheet(writeWorkbookHolder.getWorkbook(), writeSheetHolder.getSheetName()); + writeSheetHolder.setCachedSheet(currentSheet); + return currentSheet; + } + public void initHead(ExcelWriteHeadProperty excelWriteHeadProperty) { if (!currentWriteHolder.needHead() || !currentWriteHolder.excelWriteHeadProperty().hasHead()) { return; diff --git a/update.md b/update.md index 35ecf499..46258104 100644 --- a/update.md +++ b/update.md @@ -1,3 +1,6 @@ +# 2.1.6 +* 修复填充只有`sheetName`会抛异常 + # 2.1.5 * 修复部分xlsx没有行号读取异常 * 填充时候支持根据`sheetName`定位`sheet` From 482c99076a1095c117b470367ff9542e64745111 Mon Sep 17 00:00:00 2001 From: Jiaju Zhuang Date: Fri, 3 Jan 2020 20:08:45 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=A1=AB=E5=85=85?= =?UTF-8?q?=E5=8F=AA=E6=9C=89`sheetName`=E4=BC=9A=E6=8A=9B=E5=BC=82?= =?UTF-8?q?=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- update.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/update.md b/update.md index 46258104..864a7803 100644 --- a/update.md +++ b/update.md @@ -1,5 +1,5 @@ # 2.1.6 -* 修复填充只有`sheetName`会抛异常 +* 修复写入只有`sheetName`会抛异常 # 2.1.5 * 修复部分xlsx没有行号读取异常