POI复杂导出记录
// 以下代码去除其他信息 仅供参考<br>List<Obj> a= demo.getOutboundReportDetail(null); Map<String, List<Obj>> map = a.stream().collect(Collectors.groupingBy(Obj::getSupplierName)); HSSFWorkbook workbook = new HSSFWorkbook(); // 设置第一个sheet的名称 HSSFSheet sheet = workbook.createSheet( "sheet1" ); sheet.setDefaultRowHeight(( short ) ( 2 * 256 )); sheet.setDefaultColumnWidth( 20 ); String fileName = "" ; //设置文件名 Cell cell = null ; CellStyle style = excelUtil.getRow1CellStyle(workbook); //标题 CellStyle row1CellStyle0 = excelUtil.getRow1CellStyle0(workbook); CellStyle rowCellStyle = excelUtil.getRow1CellStyle1(workbook); CellStyle row1CellStyle2 = excelUtil.getRow1CellStyle2(workbook); CellStyle row1CellStyle3 = excelUtil.getRow1CellStyle3(workbook); // 开始添加excel第一行表头(excel中下标是0) HSSFRow row = sheet.createRow( 0 ); sheet.addMergedRegion( new CellRangeAddress( 0 , 0 , 0 , 6 )); //合并表头 cell = row.createCell( 0 ); style.setAlignment(HorizontalAlignment.CENTER); cell.setCellValue( "*************" ); //标题 cell.setCellStyle(style); BigDecimal count = list.stream().map(getCount).reduce(add); BigDecimal Money = list.stream().map(getTotalPrice).reduce(add); int rowNum = 1 ; for (String string : map.keySet()) { List<OutboundProductVO> excelList = JSON.parseArray(JSON.toJSONString(map.get(string)), OutboundProductVO. class ); BigDecimal sumCount = excelList.stream().map(OutboundProductVO::getCount).reduce(BigDecimal.ZERO,BigDecimal::add); BigDecimal sumTotal= excelList.stream().map(OutboundProductVO::getTotalPrice).reduce(BigDecimal.ZERO,BigDecimal::add); row = sheet.createRow(rowNum); cell = row.createCell( 0 ); sheet.addMergedRegion( new CellRangeAddress(rowNum,rowNum, 0 , 6 )); cell.setCellValue( "****" +string); cell.setCellStyle(row1CellStyle0); rowNum++; //表头 row=sheet.createRow(rowNum); cell = row.createCell( 0 ); cell.setCellStyle(rowCellStyle); cell.setCellValue( "****" ); cell = row.createCell( 1 ); cell.setCellStyle(rowCellStyle); cell.setCellValue( "****" ); cell = row.createCell( 2 ); cell.setCellStyle(rowCellStyle); cell.setCellValue( "****" ); cell = row.createCell( 3 ); cell.setCellStyle(rowCellStyle); cell.setCellValue( "**" ); cell = row.createCell( 4 ); cell.setCellStyle(rowCellStyle); cell.setCellValue( "**" ); cell = row.createCell( 5 ); cell.setCellStyle(rowCellStyle); cell.setCellValue( "**" ); cell = row.createCell( 6 ); cell.setCellStyle(rowCellStyle); cell.setCellValue( "***" ); rowNum++; //表体数据 for ( int i = 0 ; i <= excelList.size(); i++) { row=sheet.createRow(rowNum); if (i == excelList.size()){ cell = row.createCell( 0 ); cell.setCellStyle(row1CellStyle2); sheet.addMergedRegion( new CellRangeAddress(rowNum,rowNum, 0 , 4 )); //合并前面的表头 cell.setCellValue( "**" ); cell = row.createCell( 1 ); cell.setCellStyle(row1CellStyle2); cell = row.createCell( 2 ); cell.setCellStyle(row1CellStyle2); cell = row.createCell( 3 ); cell.setCellStyle(row1CellStyle2); cell = row.createCell( 4 ); cell.setCellStyle(row1CellStyle2); cell = row.createCell( 5 ); cell.setCellStyle(row1CellStyle2); cell.setCellValue(Count); cell = row.createCell( 6 ); cell.setCellStyle(row1CellStyle2); cell.setCellValue(Total); } else { cell = row.createCell( 0 ); cell.setCellValue(Code); cell = row.createCell( 1 ); cell.setCellValue(Name); cell = row.createCell( 2 ); cell.setCellValue(Specification); cell = row.createCell( 3 ); cell.setCellValue(Price); cell = row.createCell( 4 ); cell.setCellValue(Unit); cell = row.createCell( 5 ); cell.setCellValue(Count); cell = row.createCell( 6 ); cell.setCellValue(Price); } rowNum++; } rowNum++; } row=sheet.createRow(rowNum); cell = row.createCell( 0 ); cell.setCellValue( "**" ); cell.setCellStyle(row1CellStyle3); cell = row.createCell( 1 ); cell.setCellStyle(row1CellStyle3); cell = row.createCell( 2 ); cell.setCellStyle(row1CellStyle3); cell = row.createCell( 3 ); cell.setCellStyle(row1CellStyle3); cell = row.createCell( 4 ); cell.setCellStyle(row1CellStyle3); cell = row.createCell( 5 ); cell.setCellStyle(row1CellStyle3); cell.setCellValue(count); cell = row.createCell( 6 ); cell.setCellStyle(row1CellStyle3); cell.setCellValue(Money); response.setCharacterEncoding( "UTF-8" ); response.setHeader( "content-Type" , "application/vnd.ms-excel;charset=UTF-8" ); response.setHeader( "Content-Disposition" , "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8" )); workbook.write(response.getOutputStream()); <br> public class ExcelUtil { public static void downLoadExcel(String fileName, HttpServletResponse response, HttpServletRequest request, Workbook workbook) throws IOException { ServletOutputStream outputStream = null ; try { try { // 设置文件名的编码格式 fileName = new String(fileName.getBytes(), "ISO8859-1" ); } catch (UnsupportedEncodingException e) { } // 设置文件的编码格式 response.setContentType( "application/octet-stream;charset=ISO8859-1" ); // 设置响应头添加附件 response.setHeader( "Content-Disposition" , "attachment;filename=" + fileName); // 设置不需要缓存 response.addHeader( "Pargam" , "no-cache" ); response.addHeader( "Cache-Control" , "no-cache" ); response.addHeader( "fileName" ,fileName); outputStream = response.getOutputStream(); workbook.write(outputStream); outputStream.flush(); } catch (IOException e) { } finally { workbook.close(); if (outputStream != null ) { outputStream.flush(); outputStream.close(); } } } public static CellStyle getRow1CellStyle(Workbook workbook) { CellStyle cellStyle = workbook.createCellStyle(); //设置水平居中 cellStyle.setAlignment(HorizontalAlignment.CENTER); //设置垂直居中 cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); //设置字体 Font font = workbook.createFont(); //设置字号 font.setFontHeightInPoints(( short ) 15 ); //设置是否为斜体 font.setItalic( false ); //设置是否加粗 font.setBold( true ); //设置字体颜色 font.setColor(IndexedColors.BLACK.index); cellStyle.setFont(font); return cellStyle; } public static CellStyle getRow1CellStyle0(Workbook workbook) { CellStyle cellStyle = workbook.createCellStyle(); //设置字体 Font font = workbook.createFont(); //设置字号 font.setFontHeightInPoints(( short ) 12 ); //设置是否为斜体 font.setItalic( false ); //设置是否加粗 font.setBold( true ); //设置字体颜色 font.setColor(IndexedColors.BLACK.index); cellStyle.setFont(font); return cellStyle; } public static CellStyle getRow1CellStyle1(Workbook workbook) { CellStyle cellStyle = workbook.createCellStyle(); //设置下边框 cellStyle.setBorderBottom(BorderStyle.THIN); //设置上边框 cellStyle.setBorderTop(BorderStyle.THIN); //设置走边框 cellStyle.setBorderLeft(BorderStyle.THIN); //设置右边框 cellStyle.setBorderRight(BorderStyle.THIN); //设置字体 Font font = workbook.createFont(); //设置字号 font.setFontHeightInPoints(( short ) 12 ); //设置是否为斜体 font.setItalic( false ); //设置是否加粗 font.setBold( true ); //设置字体颜色 font.setColor(IndexedColors.BLACK.index); cellStyle.setFont(font); //设置背景 cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); cellStyle.setFillForegroundColor(IndexedColors.PALE_BLUE.index);; return cellStyle; } public static CellStyle getRow1CellStyle2(Workbook workbook) { CellStyle cellStyle = workbook.createCellStyle(); //设置下边框 cellStyle.setBorderBottom(BorderStyle.THIN); //设置上边框 cellStyle.setBorderTop(BorderStyle.THIN); //设置走边框 cellStyle.setBorderLeft(BorderStyle.THIN); //设置右边框 cellStyle.setBorderRight(BorderStyle.THIN); //设置字体 Font font = workbook.createFont(); //设置字号 font.setFontHeightInPoints(( short ) 11 ); //设置是否为斜体 font.setItalic( false ); //设置是否加粗 font.setBold( true ); //设置字体颜色 font.setColor(IndexedColors.BLACK.index); cellStyle.setFont(font); return cellStyle; } public static CellStyle getRow1CellStyle3(Workbook workbook) { CellStyle cellStyle = workbook.createCellStyle(); //设置下边框 cellStyle.setBorderBottom(BorderStyle.THIN); //设置上边框 cellStyle.setBorderTop(BorderStyle.THIN); //设置走边框 cellStyle.setBorderLeft(BorderStyle.THIN); //设置右边框 cellStyle.setBorderRight(BorderStyle.THIN); //设置字体 Font font = workbook.createFont(); //设置字号 font.setFontHeightInPoints(( short ) 12 ); //设置是否为斜体 font.setItalic( false ); //设置是否加粗 font.setBold( true ); //设置字体颜色 font.setColor(IndexedColors.BLACK.index); cellStyle.setFont(font); //设置背景 cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); cellStyle.setFillForegroundColor(IndexedColors.PALE_BLUE.index);; return cellStyle; } }<br>大致效果 |

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结