因为客户新需求,导出的Excel需要三级级联,以及单个下拉框问题。
刚刚处理完,分开记录一下,方便下次查阅(动态导出三级级联Excel后续会更新)。
// 创建一个excel
XSSFWorkbook book = new XSSFWorkbook();
// 创建需要用户填写的sheet
XSSFSheet sheetPro = (XSSFSheet) book.createSheet("SheetName");
//设置前x行冻结
sheetPro.createFreezePane(0,1,0,1);
// 产生表格标题行
Row row0 = sheetPro.createRow(0);
row0.createCell(0).setCellValue("title01");
//title02需要下拉
row0.createCell(1).setCellValue("title02");
row0.createCell(2).setCellValue("title03");
//下拉值,设置下拉控制的范围
CellRangeAddressList regions = new CellRangeAddressList(1, 50, 1, 1);
// 生成下拉框内容
// 绑定下拉框和作用区域
String[] strings = new String[] { "列1", "列2", "列3"};
DataValidationConstraint constraint = dvHelper.createExplicitListConstraint(strings);
DataValidation data_validation = dvHelper.createValidation(constraint,regions );
//验证
data_validation.createErrorBox("错误", "请选择下拉框的值");
data_validation.setShowErrorBox(true);
data_validation.setSuppressDropDownArrow(true);
// 对sheet页生效
sheetPro.addValidationData(data_validation);
OutputStream os = null;
//设置默认文件名为当前时间:年月日时分秒
String fileName=new SimpleDateFormat("yyyyMMddhhmmss").format(new Date()).toString();
//设置response头信息
response.setContentType("application/vnd.ms-excel; charset=utf-8");
response.setHeader("Content-disposition", "attachment;filename= " + fileName+".xlsx");
response.setCharacterEncoding("utf-8");
//其实这就是为了将导出的Excel发到浏览器,可以选择路径保存
try {
os= response.getOutputStream();
book.write(os);
} catch (Exception e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(os);
}