【下拉列表值超过255问题】poi生成excel设置单列-解决方案
2018-01-08 11:07
666 查看
poi生成2003以下版本excel(.xls后缀文件)
注意:该版本生成的会存在兼容性问题,下述会进行说明。项目引用poi库的依赖 (略过)
构造生成excel模板方法// 传入下拉列表数组值,构造信息模板
public static Workbook generateExcel(String[] typeArrays) {
Workbook wb = new HSSFWorkbook();
// 创建模板工作表
Sheet sheet = wb.createSheet("test");
// 创建下拉列表值存储工作表并设置值
genearteOtherSheet(wb, typeArrays);
// 创建模板列信息并绑定下拉列表值
Row row = sheet.createRow(0);
// 设置列信息样式
setStyle(wb, sheet, 0);
setStyle(wb, sheet, 1);
// 绑定列信息
Cell nameCell = row.createCell((int) 0);
nameCell.setCellValue("名称");
Cell typeCell = row.createCell((int) 1);
typeCell.setCellValue("类型");
// 设置下拉列表直绑定对哪一页起作用
sheet.addValidationData(SetDataValidation("typelist!$A$1:$A$" + typeArrays.length, 1, 0, typeArrays.length, 0));
// 隐藏作为下拉列表值的Sheet
wb.setSheetHidden(wb.getSheetIndex("typelist"), 1);
return wb;
}
// 创建下拉列表值存储工作表并设置值
public static void genearteOtherSheet(Workbook wb, String[] typeArrays) {
// 创建下拉列表值存储工作表
Sheet sheet = wb.createSheet("typelist");
// 循环往该sheet中设置添加下拉列表的值
for (int i = 0; i < typeArrays.length; i++) {
Row row = sheet.createRow(i);
Cell cell = row.createCell((int) 0);
cell.setCellValue(typeArrays[i]);
}
}
// 设置列信息样式
public static void setStyle(Workbook wb, Sheet sheet,int colNum) {
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setAlignment(CellStyle.ALIGN_CENTER);
DataFormat format = wb.createDataFormat();
cellStyle.setDataFormat(format.getFormat("@"));
sheet.setDefaultColumnStyle(colNum, cellStyle);
}
// 设置并引用其他Sheet作为绑定下拉列表数据
public static DataValidation SetDataValidation(String strFormula, int firstRow, int firstCol, int endRow, int endCol) {
// 表示A列1-59行作为下拉列表来源数据
// String formula = "typelist!$A$1:$A$59" ;
// 原顺序为 起始行 起始列 终止行 终止列
CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
// add
DVConstraint constraint = DVConstraint.createFormulaListConstraint(strFormula);
// add
DataValidation dataValidation = new HSSFDataValidation(regions, constraint);
return dataValidation;
}
public static void main(String[] args) throws Exception {
List<String> typelist = new ArrayList<String>();
for (int i = 0; i < 200; i++) {
typelist.add("T" + (0 + i));
}
String[] typeArrays = typelist.toArray(new String[typelist.size()]);
Workbook wb = generateExcel(typeArrays);
File tempFile = new File("C:\\Users\\gqd\\Desktop\\test.xls");
OutputStream os = new FileOutputStream(tempFile);
wb.write(os);
os.close();
}
问题点
单元格下拉选择值,保存提示引用兼容性问题
强制保存后,重新打开,下拉列无法获取引用并取值
poi生成2007以上版本excel(.xlsx后缀文件)
项目引用poi库的依赖 (略过)构造生成excel模板方法// 传入下拉列表数组值,构造信息模板
public static Workbook generateExcel(String[] typeArrays) {
Workbook wb = new XSSFWorkbook();
// 创建模板工作表
Sheet sheet = wb.createSheet("test");
// 创建下拉列表值存储工作表并设置值
genearteOtherSheet(wb, typeArrays);
// 创建模板列信息并绑定下拉列表值
Row row = sheet.createRow(0);
// 设置列信息样式 -- 当前样式对于列信息未居中
setStyle(wb, sheet, 0);
setStyle(wb, sheet, 1);
// 绑定列信息
Cell nameCell = row.createCell((int) 0);
nameCell.setCellValue("名称");
Cell typeCell = row.createCell((int) 1);
typeCell.setCellValue("类型");
// 设置下拉列表直绑定对哪一页起作用
sheet.addValidationData(SetDataValidation(wb, "typelist!$A$1:$A$" + typeArrays.length, 1, 0, typeArrays.length, 0));
// 隐藏作为下拉列表值的Sheet
wb.setSheetHidden(wb.getSheetIndex("typelist"), 1);
return wb;
}
// 创建下拉列表值存储工作表并设置值
public static void genearteOtherSheet(Workbook wb, String[] typeArrays) {
// 创建下拉列表值存储工作表
Sheet sheet = wb.createSheet("typelist");
// 循环往该sheet中设置添加下拉列表的值
for (int i = 0; i < typeArrays.length; i++) {
Row row = sheet.createRow(i);
Cell cell = row.createCell((int) 0);
cell.setCellValue(typeArrays[i]);
}
}
// 设置列信息样式
public static void setStyle(Workbook wb, Sheet sheet,int colNum) {
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setAlignment(CellStyle.ALIGN_CENTER);
DataFormat format = wb.createDataFormat();
cellStyle.setDataFormat(format.getFormat("@"));
sheet.setDefaultColumnStyle(colNum, cellStyle);
}
// 设置并引用其他Sheet作为绑定下拉列表数据
public static DataValidation SetDataValidation(Workbook wb, String strFormula, int firstRow, int firstCol, int endRow, int endCol) {
// 表示A列1-59行作为下拉列表来源数据
// String formula = "typelist!$A$1:$A$59" ;
// 原顺序为 起始行 起始列 终止行 终止列
CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
DataValidationHelper dvHelper = new XSSFDataValidationHelper((XSSFSheet) wb.getSheet("typelist"));
DataValidationConstraint formulaListConstraint = dvHelper.createFormulaListConstraint(strFormula);
DataValidation dataValidation = dvHelper.createValidation(formulaListConstraint, regions);
return dataValidation;
}
public static void main(String[] args) throws Exception {
List<String> typelist = new ArrayList<String>();
for (int i = 0; i < 200; i++) {
typelist.add("T" + (0 + i));
}
String[] typeArrays = typelist.toArray(new String[typelist.size()]);
Workbook wb = generateExcel(typeArrays);
File tempFile = new File("C:\\Users\\gqd\\Desktop\\test.xlsx");
OutputStream os = new FileOutputStream(tempFile);
wb.write(os);
os.close();
}
完美解决该问题
上述生成excel模板仅限于解决当前问题,如有兴趣,自己封装
相关文章推荐
- poi生成excel设置单列为下拉列表值超过255问题解决方案
- POI java excel 生成下拉列表
- [置顶]POI操作EXCEL之导出Excel(设置有效性,下拉列表引用)
- POI操作EXCEL之导出Excel(设置有效性,下拉列表引用)
- POI操作EXCEL之导出Excel(设置有效性,下拉列表引用)
- apache POI3.2 java操作excel 设置数据有效性,实现excel单元格列表和提示
- 1、把Excel的单元格设置为下拉列表
- asp.net+nopi生成Excel遇到设置单元格值null问题
- Excel调用已有数据利用已经录入的项快速的生成下拉列表
- POI实战-java开发excel详解之常用操作-下拉列表
- 用NPOI导出Excel,生成下拉列表、以及下拉联动列表(第1篇/共3篇)
- 关于问题由于 web 服务器上的“isapi 和 cgi 限制”列表设置,无法提供您请求的页面的解决方案
- jquery mobile动态生成的下拉列表无法显示默认选择值的问题
- POI导出时,将指定的列设置为下拉列表
- Poi 生成的xls后缀的Excel文件,用Excel 2003打开乱码解决方案。
- excel设置下拉列表选项
- POI生成Excel常见的几种样式的设置
- Web前端:POI操作EXCEL出现的单元格格式丢失问题的解决方案
- POI导出EXCEL 下拉列表引用
- 使用POI生成Excel文档并设置打印样式