因为并没有多少数据,下载可简单了,只要用最简单的那种就好了
注意的坑就是1、一个sheet页我通常只留60000行的数据,
2、还有就是注意编码了,小心乱码,比如表名,如果不设置对应编码,下载下来中文名字就消失了。
public static HSSFWorkbook downloadTemplate(HttpServletResponse response, List<List<ExportMediationDTO>> list, List<String[]> excelHeader, String fileName,
List<String> sheetName) throws IOException {
HSSFWorkbook wb = new HSSFWorkbook();
if (CollectionUtils.isNotEmpty(list) && CollectionUtils.isNotEmpty(excelHeader) && list.size() == excelHeader.size()
&& excelHeader.size() == sheetName.size()) {
for (int i = 0; i < list.size(); i++) {
wb.createSheet();
wb.setSheetName(i, sheetName.get(i));
HSSFSheet sheet0 = wb.getSheetAt(i);
setData(list.get(i), excelHeader.get(i), wb, sheet0);
}
}
response.setContentType("application/vnd.ms-excel");
fileName = URLEncoder.encode(fileName, "UTF-8");// "GBK","ISO8859_1"
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xls");
OutputStream ouputStream = response.getOutputStream();
wb.write(ouputStream);
ouputStream.flush();
ouputStream.close();
wb.close();
return wb;
}
public static HSSFWorkbook export(HttpServletResponse response, List<ExportMediationDTO> list, String[] excelHeader, String sheetName) throws IOException {
HSSFWorkbook wb = new HSSFWorkbook();
if (list.size() < 65500) {
wb.createSheet();
wb.setSheetName(0, sheetName.split("_")[0]);
HSSFSheet sheet0 = wb.getSheetAt(0);
setData(list, excelHeader, wb, sheet0);
} else {
List<ExportMediationDTO> list0 = list.subList(0, 65500);
List<ExportMediationDTO> list1 = list.subList(65500, list.size());
wb.createSheet();
wb.setSheetName(0, sheetName.split("_")[0]);
HSSFSheet sheet0 = wb.getSheetAt(0);
setData(list0, excelHeader, wb, sheet0);
wb.createSheet();
wb.setSheetName(1, sheetName.split("_")[0] + 1);
HSSFSheet sheet1 = wb.getSheetAt(1);
setData(list1, excelHeader, wb, sheet1);
}
response.setContentType("application/vnd.ms-excel");
// String[] arr = sheetName.split("_");
sheetName = URLEncoder.encode(sheetName, "UTF-8");// "GBK","ISO8859_1"
response.setHeader("Content-disposition", "attachment;filename=" + sheetName + ".xls");
OutputStream ouputStream = response.getOutputStream();
wb.write(ouputStream);
ouputStream.flush();
ouputStream.close();
wb.close();
return wb;
}
private static void setData(List<ExportMediationDTO> list, String[] excelHeader, HSSFWorkbook wb, HSSFSheet sheet) {
sheet.setDefaultColumnWidth(15);
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HorizontalAlignment.CENTER); // 水平布局:居中
style.setVerticalAlignment(VerticalAlignment.CENTER);
// 垂直居中
style.setWrapText(true);
HSSFRow row = sheet.createRow((int) 0);
row.setHeight((short) (35 * 20));
for (int i = 0; i < excelHeader.length; i++) {
Cell cell = row.createCell(i);
cell.setCellValue(excelHeader[i]);
cell.setCellStyle(style);
}
for (int i = 0; i < list.size(); i++) {
ExportMediationDTO emp = list.get(i);
row = sheet.createRow(i + 1);
row.setHeight((short) (25 * 20));
packingsSetCell(style, row, emp);
}
}
private static void packingsSetCell(HSSFCellStyle style, HSSFRow row, ExportMediationDTO emp) {
setcell(style, row, 0, emp.getZero());
setcell(style, row, 1, emp.getOne());
setcell(style, row, 2, emp.getTwo());
setcell(style, row, 3, emp.getThree());
setcell(style, row, 4, emp.getFour());
setcell(style, row, 5, emp.getFive());
setcell(style, row, 6, emp.getSix());
setcell(style, row, 7, emp.getSeven());
setcell(style, row, 8, emp.getEight());
setcell(style, row, 9, emp.getNine());
setcell(style, row, 10, emp.getTen());
setcell(style, row, 11, emp.getEleven());
setcell(style, row, 12, emp.getTwelve());
setcell(style, row, 13, emp.getThirteen());
setcell(style, row, 14, emp.getFourteen());
setcell(style, row, 15, emp.getFifteen());
}
private static Cell setcell(HSSFCellStyle style, HSSFRow row, int i, String type) {
Cell cell = row.createCell(i);
cell.setCellStyle(style);
cell.setCellValue(type);
return cell;
}