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修复
* 【core 】 修复NumberWordFormatter拼写错误issue#799@Github
* 【poi 】 修复xls文件下拉列表无效问题issue#I1C79P@Gitee
-------------------------------------------------------------------------------------------------------------
## 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.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<ExcelWriter> {
* @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);
}

View File

@ -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();
}