package com.iailab.module.model.common.utils; import com.iailab.module.model.api.mcs.dto.PreDataItemChartRespVO; import com.iailab.module.model.api.mcs.dto.PreDataSampleViewRespDTO; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.apache.poi.ss.usermodel.VerticalAlignment; import org.apache.poi.ss.util.CellRangeAddress; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.OutputStream; import java.lang.reflect.Field; import java.text.SimpleDateFormat; import java.util.Date; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; /** * Excel 导出通用工具类 * * @author PanZhibao * @date 2021å¹´06月29æ—¥ 9:06 */ public class ExcelUtil { /** * 导出PointValueExcel * * @param sheetTitle * @param title * @param list * @param response * @return */ public static byte[] exportPointValue(String sheetTitle, String[] title, List<Object> list, HttpServletResponse response) { HSSFWorkbook wb = new HSSFWorkbook();//创建excel表 HSSFSheet sheet = wb.createSheet(sheetTitle); sheet.setDefaultColumnWidth(20);//设置默认行宽 //è¡¨å¤´æ ·å¼ï¼ˆåŠ 粗,水平居ä¸ï¼Œåž‚ç›´å±…ä¸ï¼‰ HSSFCellStyle cellStyle = wb.createCellStyle(); cellStyle.setAlignment(HorizontalAlignment.CENTER);//æ°´å¹³å±…ä¸ cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//åž‚ç›´å±…ä¸ HSSFFont fontStyle = wb.createFont(); cellStyle.setFont(fontStyle); //æ ‡é¢˜æ ·å¼ï¼ˆåŠ 粗,垂直居ä¸ï¼‰ HSSFCellStyle cellStyle2 = wb.createCellStyle(); cellStyle2.setVerticalAlignment(VerticalAlignment.CENTER);//åž‚ç›´å±…ä¸ cellStyle2.setFont(fontStyle); //å—æ®µæ ·å¼ï¼ˆåž‚ç›´å±…ä¸ï¼‰ HSSFCellStyle cellStyle3 = wb.createCellStyle(); cellStyle3.setVerticalAlignment(VerticalAlignment.CENTER);//åž‚ç›´å±…ä¸ //æ•°å—æ ·å¼ HSSFCellStyle cellStyle4 = wb.createCellStyle(); HSSFDataFormat df = wb.createDataFormat(); // æ¤å¤„设置数æ®æ ¼å¼ cellStyle4.setVerticalAlignment(VerticalAlignment.CENTER);//åž‚ç›´å±…ä¸ cellStyle4.setDataFormat(df.getFormat("#,##0.000000"));//è®¾ç½®æ•°å€¼ç±»åž‹æ ¼å¼ä¸ºä¿ç•™ä¸¤ä½å°æ•° //创建表头 HSSFRow row = sheet.createRow(0); //row.setHeightInPoints(20);//行高 HSSFCell cell = row.createCell(0); cell.setCellValue(sheetTitle); cell.setCellStyle(cellStyle); sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, (title.length - 1))); //åˆ›å»ºæ ‡é¢˜ HSSFRow rowTitle = sheet.createRow(1); //rowTitle.setHeightInPoints(20); HSSFCell hc; for (int i = 0; i < title.length; i++) { hc = rowTitle.createCell(i); hc.setCellValue(title[i]); hc.setCellStyle(cellStyle2); } byte result[] = null; try { //åˆ›å»ºè¡¨æ ¼æ•°æ® Field[] fields; int i = 2; for (Object obj : list) { fields = obj.getClass().getDeclaredFields(); HSSFRow rowBody = sheet.createRow(i); //rowBody.setHeightInPoints(20); int j = 0; for (Field f : fields) { f.setAccessible(true); Object va = f.get(obj); if (null == va) { va = ""; } hc = rowBody.createCell(j); if (j == 0) { hc.setCellValue(Double.parseDouble(va.toString())); hc.setCellStyle(cellStyle4); } else { hc.setCellValue(va.toString()); hc.setCellStyle(cellStyle3); } j++; } i++; } //设置Httpå“应头告诉æµè§ˆå™¨ä¸‹è½½è¿™ä¸ªé™„件 response.setHeader("Content-Disposition", "attachment;Filename=" + System.currentTimeMillis() + ".xls"); OutputStream outputStream = response.getOutputStream(); wb.write(outputStream); outputStream.close(); return wb.getBytes(); } catch (Exception ex) { Logger.getLogger(ExcelUtil.class.getName()).log(Level.SEVERE, null, ex); return result; } finally { try { wb.close(); } catch (IOException ex) { Logger.getLogger(ExcelUtil.class.getName()).log(Level.SEVERE, null, ex); } } } //预测图表数æ®è½¬excel public static byte[] exportchart(String sheetTitle, PreDataItemChartRespVO respVO, HttpServletResponse response) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(sheetTitle); sheet.setDefaultColumnWidth(20);//设置默认行宽 // è¡¨å¤´æ ·å¼ï¼ˆåŠ 粗,水平居ä¸ï¼Œåž‚ç›´å±…ä¸ï¼‰ HSSFCellStyle cellStyle = wb.createCellStyle(); cellStyle.setAlignment(HorizontalAlignment.CENTER); cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); HSSFFont fontStyle = wb.createFont(); cellStyle.setFont(fontStyle); // æ ‡é¢˜æ ·å¼ï¼ˆåŠ 粗,垂直居ä¸ï¼‰ HSSFCellStyle cellStyle2 = wb.createCellStyle(); cellStyle2.setVerticalAlignment(VerticalAlignment.CENTER); cellStyle2.setFont(fontStyle); // å—æ®µæ ·å¼ï¼ˆåž‚ç›´å±…ä¸ï¼‰ HSSFCellStyle cellStyle3 = wb.createCellStyle(); cellStyle3.setVerticalAlignment(VerticalAlignment.CENTER); // æ•°å—æ ·å¼ HSSFCellStyle cellStyle4 = wb.createCellStyle(); HSSFDataFormat df = wb.createDataFormat(); cellStyle4.setVerticalAlignment(VerticalAlignment.CENTER); cellStyle4.setDataFormat(df.getFormat("#,##0.000000")); // åˆ›å»ºæ ‡é¢˜ String[] title = new String[respVO.getLegend().size() * 4]; for (int i = 0; respVO.getLegend().size() > i; i++) { title[i * 4] = "日期时间"; title[i * 4 + 1] = respVO.getLegend().get(i) + ":真实值"; title[i * 4 + 2] = "日期时间"; title[i * 4 + 3] = respVO.getLegend().get(i) + ":预测值"; } HSSFRow rowTitle = sheet.createRow(0); HSSFCell hc; for (int i = 0; i < title.length; i++) { hc = rowTitle.createCell(i); hc.setCellValue(title[i]); hc.setCellStyle(cellStyle2); } LinkedHashMap<String, PreDataSampleViewRespDTO> viewMap = respVO.getViewMap(); byte result[] = null; try { // åˆ›å»ºè¡¨æ ¼æ•°æ® //é€åˆ—æ’å…¥ for (int j = 0; viewMap.size() > j; j++) { //åŽ»æŽ‰æ ‡é¢˜è¡Œï¼Œä»Žç¬¬ä¸€è¡Œå¼€å§‹ //é€è¡Œæ’å…¥ for (Map.Entry<String, PreDataSampleViewRespDTO> entry : viewMap.entrySet()) { //真实值 List<Object[]> realData = entry.getValue().getRealData(); //预测值 List<Object[]> preDataN = entry.getValue().getPreDataN(); HSSFRow rowBody; //æ’入真实值 for (int i = 0; realData.size() > i; i++) { //判æ–是å¦åˆ›å»ºè¿‡è¡Œï¼Œå¦‚果没有创建行,å¦åˆ™æ›´æ–°è¡Œ if (sheet.getRow(i + 1) == null) { rowBody = sheet.createRow(i + 1); } else { rowBody = sheet.getRow(i + 1); } //æ’入时间 hc = rowBody.createCell(j * 4); if (realData.get(i)[0] != null) { if (realData.get(i)[0] instanceof Date) { String formattedDate = sdf.format(realData.get(i)[0]); hc.setCellValue(formattedDate); } else { hc.setCellValue(realData.get(i)[0].toString()); } hc.setCellStyle(cellStyle3); } else { hc.setCellValue(""); hc.setCellStyle(cellStyle3); } //æ’入值 hc = rowBody.createCell(j * 4 + 1); if (realData.get(i)[1] != null) { hc.setCellValue(realData.get(i)[1].toString()); hc.setCellStyle(cellStyle4); } else { hc.setCellValue(""); hc.setCellStyle(cellStyle4); } } //æ’入预测值 for (int i = 0; preDataN.size() > i; i++) { //判æ–是å¦åˆ›å»ºè¿‡è¡Œï¼Œå¦‚果没有创建行,å¦åˆ™æ›´æ–°è¡Œ if (sheet.getRow(i + 1) == null) { rowBody = sheet.createRow(i + 1); } else { rowBody = sheet.getRow(i + 1); } //æ’入时间 hc = rowBody.createCell(j * 4 + 2); if (preDataN.get(i)[0] != null) { if (preDataN.get(i)[0] instanceof Date) { String formattedDate = sdf.format(preDataN.get(i)[0]); hc.setCellValue(formattedDate); } else { hc.setCellValue(preDataN.get(i)[0].toString()); } hc.setCellStyle(cellStyle3); } else { hc.setCellValue(""); hc.setCellStyle(cellStyle3); } //æ’入值 hc = rowBody.createCell(j * 4 + 3); if (preDataN.get(i)[1] != null) { hc.setCellValue(preDataN.get(i)[1].toString()); hc.setCellStyle(cellStyle4); } else { hc.setCellValue(""); hc.setCellStyle(cellStyle4); } } } } // 设置Httpå“应头告诉æµè§ˆå™¨ä¸‹è½½è¿™ä¸ªé™„件 response.setHeader("Content-Disposition", "attachment;Filename=" + System.currentTimeMillis() + ".xls"); OutputStream outputStream = response.getOutputStream(); wb.write(outputStream); outputStream.close(); return wb.getBytes(); } catch (Exception ex) { Logger.getLogger(ExcelUtil.class.getName()).log(Level.SEVERE, null, ex); return result; } finally { try { wb.close(); } catch (IOException ex) { Logger.getLogger(ExcelUtil.class.getName()).log(Level.SEVERE, null, ex); } } } }