使用poi匯出excel檔案
一、獲取資料
private List<PmsrT2> getPmsrT2List(HttpServletRequest request) {
try {
String pmsProjectId = request.getParameter("pmsProjectId"); //專案主鍵
String orgCodes = request.getParameter("orgCodes"); //省份集合
String conserveType = request.getParameter("conserveType"); //養護型別
String roadCode = request.getParameter("roadCode"); //路線編碼
if(!StringUtils.isEmpty(pmsProjectId)){
String tableName = pmsProjectId;
String hql = "select * from "+tableName+" where 1=1 ";
List<String> params = new ArrayList<String>();
if(!StringUtils.isEmpty(orgCodes)){
String [] orgCodesArr = orgCodes.split(",");
String zwf = com.platform.common.utils.StringUtils.repeat("?", ", ", orgCodesArr.length);
for(int i = 0;i < orgCodesArr.length;i++) {
params.add(orgCodesArr[i]);
}
hql += " and prov_code in ( "+zwf+" ) ";
}
if(!StringUtils.isEmpty(conserveType)){
hql += " and fatype = ? ";
params.add(conserveType);
}
if(!StringUtils.isEmpty(roadCode)){
hql += " and road_code like ? ";
params.add('%'+roadCode+'%');
}
return super.getDao().findBySql(hql, params.toArray(), PmsrT2.class);
}
request.getSession().setAttribute("process", "findOk");//設定查詢進度
return null;
} catch (Exception e) {
return null;
}
}
二、設定表頭樣式
/**
* @Description 設定文字cell的樣式
* @createDate 2018年8月31日 下午3:32:31
*/
private CellStyle getCellStyle(SXSSFWorkbook wb) {
CellStyle cellStyle = wb.createCellStyle();// 單元格樣式
Font fontstyle = wb.createFont();
fontstyle.setBold(false);// 不加粗
fontstyle.setFontName("宋體");// 宋體
fontstyle.setFontHeightInPoints((short) 10);// 字型大小
cellStyle.setFont(fontstyle);// 把字型格式新增到單元格中
cellStyle.setAlignment(HorizontalAlignment.CENTER);// 內容居中,新增邊框
cellStyle.setBorderBottom(BorderStyle.THIN);
cellStyle.setBorderLeft(BorderStyle.THIN);
cellStyle.setBorderRight(BorderStyle.THIN);
cellStyle.setBorderTop(BorderStyle.THIN);
return cellStyle;
}
/**
* @Description 新增excel標題
* @createDate 2018年8月31日 下午3:30:42
*/
private Sheet addTitle(Sheet sheet, CellStyle headStyle) {
String[] head = new String[] {"省份","養護年度","區域", "地區", "路線型別", "路線類別","路線編碼", "路線名稱", "起點樁號","終點樁號","里程","路面寬度","AADT","養護前PQI","養護後PQI","養護前PCI","養護後PCI",
"養護前RQI","養護後RQI","養護前RDI","養護後RDI","養護前SRI","養護後SRI","養護前PSSI","養護後PSSI","行車方向","技術等級","路面型別","養護方案分類","養護方案編碼","養護方案名稱","養護方案費用(萬元)"};
Row row = sheet.createRow(0);
for (int i = 0; i < head.length; i++) {
sheet.setColumnWidth(i, 20*256);
Cell cell = row.createCell(i);
cell.setCellValue(head[i]);
cell.setCellStyle(headStyle);
row.setHeight((short)720);
}
return sheet;
}
三、給工作簿新增查詢結果值
private void setExcelValue(Sheet sheet, CellStyle cellStyle, List<PmsrT2> pmsrT2List) throws Exception {
for (int i = 0; i < pmsrT2List.size(); i++) {
Row row = sheet.createRow(i + 1);//第一行
row.createCell(0).setCellValue(pmsrT2List.get(i).getProvName());
row.createCell(1).setCellValue(String.valueOf(pmsrT2List.get(i).getYhYear()));
row.createCell(2).setCellValue(convert.convertAreaName(pmsrT2List.get(i).getTheArea()));
row.createCell(3).setCellValue(convert.convertPartName(pmsrT2List.get(i).getThePart()));
row.createCell(4).setCellValue(convert.convertLxlxName(pmsrT2List.get(i).getRoadCategory()));
row.createCell(5).setCellValue(convert.convertinitGllbName(pmsrT2List.get(i).getRoadType()));
row.createCell(6).setCellValue(pmsrT2List.get(i).getRoadCode());
row.createCell(7).setCellValue(pmsrT2List.get(i).getRoadName());
row.createCell(8).setCellValue(ImportNumberStringUtils.numTwoFormat(pmsrT2List.get(i).getStartStake()));
row.createCell(9).setCellValue(ImportNumberStringUtils.numTwoFormat(pmsrT2List.get(i).getEndStake()));
row.createCell(10).setCellValue(String.valueOf(pmsrT2List.get(i).getRoadLength()));
row.createCell(11).setCellValue(ImportNumberStringUtils.numTwoFormat(pmsrT2List.get(i).getRoadWith()));
row.createCell(12).setCellValue(pmsrT2List.get(i).getCarAadt());
row.createCell(13).setCellValue(ImportNumberStringUtils.numTwoFormat(pmsrT2List.get(i).getPqi()));
row.createCell(14).setCellValue(ImportNumberStringUtils.numTwoFormat(pmsrT2List.get(i).getPqi2()));
row.createCell(15).setCellValue(ImportNumberStringUtils.numTwoFormat(pmsrT2List.get(i).getPci()));
row.createCell(16).setCellValue(ImportNumberStringUtils.numTwoFormat(pmsrT2List.get(i).getPci2()));
row.createCell(17).setCellValue(ImportNumberStringUtils.numTwoFormat(pmsrT2List.get(i).getRqi()));
row.createCell(18).setCellValue(ImportNumberStringUtils.numTwoFormat(pmsrT2List.get(i).getRqi2()));
row.createCell(19).setCellValue(ImportNumberStringUtils.numTwoFormat(pmsrT2List.get(i).getRdi()));
row.createCell(20).setCellValue(ImportNumberStringUtils.numTwoFormat(pmsrT2List.get(i).getRdi2()));
row.createCell(21).setCellValue(ImportNumberStringUtils.numTwoFormat(pmsrT2List.get(i).getSri()));
row.createCell(22).setCellValue(ImportNumberStringUtils.numTwoFormat(pmsrT2List.get(i).getSri2()));
row.createCell(23).setCellValue(ImportNumberStringUtils.numTwoFormat(pmsrT2List.get(i).getPssi()));
row.createCell(24).setCellValue(ImportNumberStringUtils.numTwoFormat(pmsrT2List.get(i).getPssi2()));
row.createCell(25).setCellValue(pmsrT2List.get(i).getRoadDirectName());
row.createCell(26).setCellValue(pmsrT2List.get(i).getRoadGradeName());
row.createCell(27).setCellValue(pmsrT2List.get(i).getPaveTypeName());
row.createCell(28).setCellValue(String.valueOf(pmsrT2List.get(i).getFatype()));
row.createCell(29).setCellValue(String.valueOf(pmsrT2List.get(i).getFacode()));
row.createCell(30).setCellValue(String.valueOf(pmsrT2List.get(i).getFaname()));
row.createCell(31).setCellValue(String.valueOf(pmsrT2List.get(i).getPrices().divide(new BigDecimal(10000))));
for (int j = 0; j <= 31; j++) {// 給每個單元格設定格式
row.getCell(j).setCellStyle(cellStyle);
}
if (i % 500 == 0) {
((SXSSFSheet) sheet).flushRows();// 每500行重新整理所有行
}
}
}
四、輸出結果流
try {
String fileName = "需求分析.xlsx";
OutputStream out = response.getOutputStream();
response.setCharacterEncoding("UTF-8");
response.reset();
response.addHeader("Content-Disposition",
" attachment;filename=" + new String(fileName.getBytes(), "iso-8859-1"));
response.setContentType("application/octet-stream");
wb.write(out);
out.close();
wb.dispose();// 處理在磁碟上支援此工作簿的臨時檔案
} catch (Exception e) {
e.printStackTrace();
}
request.getSession().setAttribute("process", "finish");//設定進度