导出类如下:
public String outputEXcel(HttpServletRequest request, HttpServletResponse response) {
//报表模板路径
String importFilePath = "/inventory_gap_rate.xlsx";
//还需要判断文件格式
File fi = new File(importFilePath);
if(importFilePath != "" && StringUtil.isNotEmpty(importFilePath) && fi.exists()){
InputStream in = null;
XSSFWorkbook wb = null;
try {
//excel模板路径
in = new FileInputStream(fi);
//读取excel模板
wb = new XSSFWorkbook(in);
} catch (FileNotFoundException e) {
log.error("输入流异常", e);
} catch (IOException e) {
e.printStackTrace();
log.error("读取Excel模板异常", e);
}
//判断Sheet的个数,避免出现越界。
if(wb.getNumberOfSheets() == 2){
//读取了模板内图表所需数据
XSSFSheet sheet = wb.getSheetAt(1);
//获取第一个sheet
XSSFSheet sheetAboutList = wb.getSheetAt(0);
//如果这行没有了,整个公式都不会有自动计算的效果的
sheet.setForceFormulaRecalculation(true);
//获取信息1
ArrayList<HashMap<String, Object>> inventoryGapRate = dao.getInventoryGapRate();
//获取信息2
ArrayList<HashMap<String, Object>> dailySaleInventoryGap = dao.getDailySaleInventoryGap();
//导出图表数据
if (inventoryGapRate != null && inventoryGapRate.size() > 0) {
for (int i = 0; i < inventoryGapRate.size(); i++) {
setInventoryGapRate(i, sheet, inventoryGapRate);
}
}
//导出信息数据
if (dailySaleInventoryGap != null && dailySaleInventoryGap.size() > 0) {
for (int i = 0; i < dailySaleInventoryGap.size(); i++) {
setDailySaleInventoryGap(i,sheetAboutList,dailySaleInventoryGap);
}
}
}
try {
//下载时文件的名称
String filename = "导出excel.xlsx";
//设置编码
if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0) {
filename = new String(filename.toString().getBytes("utf-8"), "iso-8859-1");
} else {
filename = URLEncoder.encode(filename.toString(), "UTF-8");
}
//文件类型
response.setContentType("application/vnd.ms-excel");
//导出文件的信息
response.setHeader("Content-disposition", "attachment;filename=" + filename);
OutputStream ouputStream = response.getOutputStream();
wb.write(ouputStream);
ouputStream.flush();
ouputStream.close();
} catch (IOException e) {
log.error("写出Excel IO异常", e);
}
}else{
}
return "";
}