fix select bug

This commit is contained in:
Looly 2020-03-25 10:25:14 +08:00
parent b6fd1e2beb
commit 9a68d4299f
3 changed files with 19 additions and 23 deletions

View File

@ -14,6 +14,7 @@
### Bug修复 ### Bug修复
* 【core 】 修复NumberWordFormatter拼写错误issue#799@Github * 【core 】 修复NumberWordFormatter拼写错误issue#799@Github
* 【poi 】 修复xls文件下拉列表无效问题issue#I1C79P@Gitee
------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------
## 5.2.4 ## 5.2.4

View File

@ -15,20 +15,18 @@ import cn.hutool.core.util.URLUtil;
import cn.hutool.poi.excel.cell.CellLocation; import cn.hutool.poi.excel.cell.CellLocation;
import cn.hutool.poi.excel.cell.CellUtil; import cn.hutool.poi.excel.cell.CellUtil;
import cn.hutool.poi.excel.style.Align; 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.Cell;
import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.DataValidation; 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.Font;
import org.apache.poi.ss.usermodel.HeaderFooter; import org.apache.poi.ss.usermodel.HeaderFooter;
import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddressList; import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.xssf.usermodel.XSSFDataValidationConstraint; import org.apache.poi.xssf.usermodel.XSSFDataValidation;
import org.apache.poi.xssf.usermodel.XSSFDataValidationHelper;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
@ -569,22 +567,20 @@ public class ExcelWriter extends ExcelBase<ExcelWriter> {
* @since 4.6.2 * @since 4.6.2
*/ */
public ExcelWriter addSelect(CellRangeAddressList regions, String... selectList) { public ExcelWriter addSelect(CellRangeAddressList regions, String... selectList) {
final DVConstraint constraint = DVConstraint.createExplicitListConstraint(selectList); final DataValidationHelper validationHelper = this.sheet.getDataValidationHelper();
final DataValidationConstraint constraint = validationHelper.createExplicitListConstraint(selectList);
// 绑定
DataValidation dataValidation; //设置下拉框数据
final DataValidation dataValidation = validationHelper.createValidation(constraint, regions);
if(this.sheet instanceof XSSFSheet) {
final XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper((XSSFSheet)sheet); //处理Excel兼容性问题
final XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) dvHelper.createExplicitListConstraint(selectList); if(dataValidation instanceof XSSFDataValidation) {
dataValidation = dvHelper.createValidation(dvConstraint, regions); dataValidation.setSuppressDropDownArrow(true);
} else { dataValidation.setShowErrorBox(true);
dataValidation = new HSSFDataValidation(regions, constraint); }else {
dataValidation.setSuppressDropDownArrow(false);
} }
dataValidation.setSuppressDropDownArrow(true);
dataValidation.setShowErrorBox(true);
return addValidationData(dataValidation); return addValidationData(dataValidation);
} }

View File

@ -419,9 +419,9 @@ public class ExcelWriteTest {
} }
@Test @Test
@Ignore // @Ignore
public void addSelectTest2() { public void addSelectTest2() {
ExcelWriter writer = ExcelUtil.getWriter(true); ExcelWriter writer = ExcelUtil.getWriter("d:/test/select.xls");
writer.writeCellValue(0, 0, "请选择科目"); writer.writeCellValue(0, 0, "请选择科目");
int firstRow = 0; int firstRow = 0;
int lastRow = 0; int lastRow = 0;
@ -433,7 +433,6 @@ public class ExcelWriteTest {
List<?> rows = new ArrayList<>(); List<?> rows = new ArrayList<>();
writer.write(rows, true); writer.write(rows, true);
writer.flush(FileUtil.file("d:/test/select.xlsx"));
writer.close(); writer.close();
} }