From 9a68d4299ffe7aa31a1f1574f745a1de77724631 Mon Sep 17 00:00:00 2001 From: Looly Date: Wed, 25 Mar 2020 10:25:14 +0800 Subject: [PATCH] fix select bug --- CHANGELOG.md | 1 + .../java/cn/hutool/poi/excel/ExcelWriter.java | 36 +++++++++---------- .../hutool/poi/excel/test/ExcelWriteTest.java | 5 ++- 3 files changed, 19 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 05e662ea6..b7746c836 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ ### Bug修复 * 【core 】 修复NumberWordFormatter拼写错误(issue#799@Github) +* 【poi 】 修复xls文件下拉列表无效问题(issue#I1C79P@Gitee) ------------------------------------------------------------------------------------------------------------- ## 5.2.4 diff --git a/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelWriter.java b/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelWriter.java index fe5234f24..cd7e2ee0b 100644 --- a/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelWriter.java +++ b/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelWriter.java @@ -15,20 +15,18 @@ import cn.hutool.core.util.URLUtil; import cn.hutool.poi.excel.cell.CellLocation; import cn.hutool.poi.excel.cell.CellUtil; import cn.hutool.poi.excel.style.Align; -import org.apache.poi.hssf.usermodel.DVConstraint; -import org.apache.poi.hssf.usermodel.HSSFDataValidation; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.DataValidation; +import org.apache.poi.ss.usermodel.DataValidationConstraint; +import org.apache.poi.ss.usermodel.DataValidationHelper; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.HeaderFooter; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.util.CellRangeAddressList; -import org.apache.poi.xssf.usermodel.XSSFDataValidationConstraint; -import org.apache.poi.xssf.usermodel.XSSFDataValidationHelper; -import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFDataValidation; import java.io.File; import java.io.IOException; @@ -569,22 +567,20 @@ public class ExcelWriter extends ExcelBase { * @since 4.6.2 */ public ExcelWriter addSelect(CellRangeAddressList regions, String... selectList) { - final DVConstraint constraint = DVConstraint.createExplicitListConstraint(selectList); - - // 绑定 - DataValidation dataValidation; - - if(this.sheet instanceof XSSFSheet) { - final XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper((XSSFSheet)sheet); - final XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) dvHelper.createExplicitListConstraint(selectList); - dataValidation = dvHelper.createValidation(dvConstraint, regions); - } else { - dataValidation = new HSSFDataValidation(regions, constraint); + final DataValidationHelper validationHelper = this.sheet.getDataValidationHelper(); + final DataValidationConstraint constraint = validationHelper.createExplicitListConstraint(selectList); + + //设置下拉框数据 + final DataValidation dataValidation = validationHelper.createValidation(constraint, regions); + + //处理Excel兼容性问题 + if(dataValidation instanceof XSSFDataValidation) { + dataValidation.setSuppressDropDownArrow(true); + dataValidation.setShowErrorBox(true); + }else { + dataValidation.setSuppressDropDownArrow(false); } - - dataValidation.setSuppressDropDownArrow(true); - dataValidation.setShowErrorBox(true); - + return addValidationData(dataValidation); } diff --git a/hutool-poi/src/test/java/cn/hutool/poi/excel/test/ExcelWriteTest.java b/hutool-poi/src/test/java/cn/hutool/poi/excel/test/ExcelWriteTest.java index e2fcd07c3..9bca94c59 100644 --- a/hutool-poi/src/test/java/cn/hutool/poi/excel/test/ExcelWriteTest.java +++ b/hutool-poi/src/test/java/cn/hutool/poi/excel/test/ExcelWriteTest.java @@ -419,9 +419,9 @@ public class ExcelWriteTest { } @Test - @Ignore +// @Ignore public void addSelectTest2() { - ExcelWriter writer = ExcelUtil.getWriter(true); + ExcelWriter writer = ExcelUtil.getWriter("d:/test/select.xls"); writer.writeCellValue(0, 0, "请选择科目"); int firstRow = 0; int lastRow = 0; @@ -433,7 +433,6 @@ public class ExcelWriteTest { List rows = new ArrayList<>(); writer.write(rows, true); - writer.flush(FileUtil.file("d:/test/select.xlsx")); writer.close(); }