项目场景:
解决excel导出问题时产生的时间报错问题
解决response.setHeader设置下载文件名无效的问题
问题描述
提示:这里描述项目中遇到的问题:
row2.createCell(3).setCellValue(createTime); 时间不能为空,否则会直接报错
//这里解决excel导出问题时产生的时间报错问题
public static void exportSystemSelectValue(List<SystemSelectValue> list, ServletOutputStream outputStream) throws IOException {
//response.getOutputStream() 输出流,下载文件 list 数据
//创建工作薄
HSSFWorkbook workbook = new HSSFWorkbook();
//创建下拉框页面
HSSFSheet sheet = workbook.createSheet("下拉框");
//设置单元格宽度 12
sheet.setDefaultColumnWidth(12);
//合并单元格 12格
CellRangeAddress address = new CellRangeAddress(0, 0, 0, 12);
//页面添加第一列单元格
sheet.addMergedRegion(address);
//创建第一列单元格
HSSFRow row = sheet.createRow(0);
//创建名称行单元格样式 style Cell 单元格
HSSFCellStyle nameStyle = creatCellStyle(workbook, (short) 16);
//创建标题单元格样式
HSSFCellStyle titleStyle = creatCellStyle(workbook, (short) 11);
//创建第一行单元格
HSSFCell cell = row.createCell(0);
//设置单元格的样式
cell.setCellStyle(nameStyle);
//设置单元格内容
if (list!=null){
cell.setCellValue("导出下拉框:");
}
//创建第二列单元格
HSSFRow row1 = sheet.createRow(1);
//定义第二行标题行单元格的值
String[] title = {"下拉框ID","删除和未删除数据","创建人","创建时间","最后修改人","最后修改时间",
"业务类型","业务类型中文解释","下拉框的value","下拉框中文显示类型","排序值","备用字段1","备用字段2","备用字段3"};
//循环对应设置第二行单元格样式和内容
for (int i = 0; i < title.length; i++) {
HSSFCell cell1 = row1.createCell(i);
cell1.setCellStyle(titleStyle);
cell1.setCellValue(title[i]);
}
//循环遍历list的值
for (int i = 0; i < list.size(); i++) {
SystemSelectValue selectValue = list.get(i);
HSSFRow row2 = sheet.createRow(i + 2);
row2.createCell(0).setCellValue(selectValue.getId());
row2.createCell(1).setCellValue(selectValue.getIsDeleted());
row2.createCell(2).setCellValue(selectValue.getCreateOperator());
if (selectValue.getCreateTime()!=null){
String createTime = DateFormatUtil.formatToStringTime(selectValue.getCreateTime());
row2.createCell(3).setCellValue(createTime);
}
row2.createCell(4).setCellValue(selectValue.getLastModifyOperator());
if(selectValue.getLastModifyTime() != null){
String lastTime = DateFormatUtil.formatToStringTime(selectValue.getLastModifyTime());
row2.createCell(5).setCellValue(lastTime);
}
row2.createCell(6).setCellValue(selectValue.getBusinessType());
row2.createCell(7).setCellValue(selectValue.getDescribe());
row2.createCell(8).setCellValue(selectValue.getSelectTypeValue());
row2.createCell(9).setCellValue(selectValue.getSelectTypeShow());
row2.createCell(10).setCellValue(selectValue.getOrderNumber());
row2.createCell(11).setCellValue(selectValue.getBak1());
row2.createCell(12).setCellValue(selectValue.getBak2());
row2.createCell(13).setCellValue(selectValue.getBak3());
}
//写入excel
try {
workbook.write(outputStream);
} catch (IOException e) {
e.printStackTrace();
}finally {
outputStream.close();
}
}
}
//这里解决请求头的格式问题: x-excel 这里一定要写对,对应下载文件格式
// Content-Disposition",“attachment;filename=” + 这里一定要等于号,对应设置文件名和后缀
response.setContentType("application/x-excel");
//Content-Type的作用:该实体头的作用是让服务器告诉浏览器它发送的数据属于什么文件类型。
//Content-Disposition 的作用:当Content-Type 的类型为要下载的类型时 , 这个信息头会告诉浏览器这个文件的名字和类型
//DateFormatUtil.formatToStringTime(new Date())+".xls") 设置当前时间
//"商家数据"+ DateFormatUtil.formatToStringTime(new Date())+".xls") 文件名称
//response.setHeader( “Content-Disposition”, “attachment;filename=” + new String( “文件名称”.getBytes(“gb2312”), “ISO8859-1” ) );
response.setHeader("Content-Disposition","attachment;filename=" +
new String(("下拉框"+ DateFormatUtil.formatToStringTime(new Date())+".xls").getBytes(),
"ISO8859-1"));
//response.getOutputStream() 输出流,下载文件
ServletOutputStream outputStream = response.getOutputStream();
ExcelUtil.exportSystemSelectValue(list,outputStream);