原本想使用别人的轮子,想想还是使用poi,毕竟别人也是封装poi。
过程就是:
创建工作簿、创建工作表、根据传来的数据 创建行、在创建单元格,并赋值 。
最后 封装response,然后写入输出流、然后刷新并输出、输出完毕关闭输出
/**
* 对文件流输出下载的中文文件名进行编码 屏蔽各种浏览器版本的差异性
*
* @throws UnsupportedEncodingException
*/
public static String encodeChineseDownloadFileName(
HttpServletRequest request, String pFileName) throws Exception {
String filename = null;
String agent = request.getHeader("USER-AGENT");
if (null != agent) {
if (-1 != agent.indexOf("Firefox")) {//Firefox
filename = "=?UTF-8?B?" + (new String(org.apache.commons.codec.binary.Base64.encodeBase64(pFileName.getBytes("UTF-8")))) + "?=";
} else if (-1 != agent.indexOf("Chrome")) {//Chrome
filename = new String(pFileName.getBytes(), "ISO8859-1");
} else {//IE7+
filename = java.net.URLEncoder.encode(pFileName, "UTF-8");
filename = filename.replace("+", "%20");
}
} else {
filename = pFileName;
}
return filename;
}
public static void exportCustomerGoodsTotalByMonth(HttpServletRequest request,
HttpServletResponse response,
Company company,
List<String> customers,
Map<String, CustomerOrderExortExcleDataDTO> listMap
) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
//设置文件名
String fileName = customers.stream().collect(Collectors.joining("-"));
//创建一个工作薄
HSSFWorkbook wb = new HSSFWorkbook();
for (Map.Entry<String, CustomerOrderExortExcleDataDTO> entry : listMap.entrySet()) {
CustomerOrderExortExcleDataDTO customerOrderExortExcleDataDTO = entry.getValue();
List<List<String>> dataList = customerOrderExortExcleDataDTO.getDataList();
//创建一个sheet
HSSFSheet sheet = wb.createSheet(entry.getKey());
//创建表头,如果没有跳过
int headerrow = 0;
List<String> headers = customerOrderExortExcleDataDTO.getColTitleList();//{"订单ID","发货日期","数量"};
if (customerOrderExortExcleDataDTO != null && customerOrderExortExcleDataDTO.getHeadTitle() != null) {
HSSFRow row = sheet.createRow(headerrow);
//表头样式
HSSFCellStyle style = wb.createCellStyle();
HSSFFont font = wb.createFont();
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
font.setFontName(excelfont);
font.setFontHeightInPoints((short) 11);
style.setFont(font);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
HSSFCell cell = row.createCell(0);
cell.setCellValue(customerOrderExortExcleDataDTO.getHeadTitle());
cell.setCellStyle(style);
HSSFCell cell2 = row.createCell(headers.size() - 1);
cell2.setCellStyle(style);
sheet.addMergedRegion(new CellRangeAddress(
0, //first row (0-based)
0, //last row (0-based)
0, //first column (0-based)
headers.size() - 1 //last column (0-based)
));
headerrow++;
}
if (headers != null) {
HSSFRow row = sheet.createRow(headerrow);
//表头样式
HSSFCellStyle style = wb.createCellStyle();
HSSFFont font = wb.createFont();
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
font.setFontName(excelfont);
font.setFontHeightInPoints((short) 11);
style.setFont(font);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
for (int i = 0; i < headers.size(); i++) {
if (i == 0) {
sheet.setColumnWidth(i, 450 * 10);
} else {
sheet.setColumnWidth(i, 350 * 10);
}
HSSFCell cell = row.createCell(i);
cell.setCellValue(headers.get(i));
cell.setCellStyle(style);
}
headerrow++;
}
if (!ObjectUtils.isEmpty(dataList)) {
HSSFCellStyle style = wb.createCellStyle();
HSSFFont font = wb.createFont();
font.setFontName(excelfont);
font.setFontHeightInPoints((short) 10);
style.setFont(font);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setAlignment(HSSFCellStyle.ALIGN_LEFT);
for (int i = 0; i < dataList.size(); i++) { //行数
HSSFRow row = sheet.createRow(headerrow);
List<String> rowDataList = dataList.get(i);
for (int j = 0; j < rowDataList.size(); j++) { //列数
HSSFCell cell = row.createCell(j);
cell.setCellValue(rowDataList.get(j) + "");
cell.setCellStyle(style);
}
headerrow++;
}
}
}
fileName = fileName + ".xls";
String filename = "";
try {
filename = encodeChineseDownloadFileName(request, fileName);
} catch (Exception e) {
e.printStackTrace();
}
response.reset();
response.setHeader("Content-disposition", filename);
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment;filename=" + filename);
response.setHeader("Pragma", "No-cache");
OutputStream ouputStream = response.getOutputStream();
wb.write(ouputStream);
ouputStream.flush();
ouputStream.close();
}