public static void main(String[] asge){ List<Map<String,Object>> list = new ArrayList<>(); Map<String,Object> map = new HashMap<>(); map.put("rowKey1","rowKey1"); map.put("rowKey2","rowKey2"); map.put("rowKey3","rowKey3"); map.put("rowKey4","rowKey4"); list.add(map); downUserList(list); } public static XSSFWorkbook createUserListExcel(List<Map<String,Object>> listresult){ // 1.创建HSSFWorkbook,一个HSSFWorkbook对应一个Excel文件 XSSFWorkbook wb = new XSSFWorkbook(); // 2.在workbook中添加一个sheet,对应Excel文件中的sheet XSSFSheet sheet = wb.createSheet("sheet1"); //添加单元格 备注信息逻辑 业务不需要可以忽略 str; //获取poi的一个工具类 XSSFCreationHelper creation = wb.getCreationHelper(); //设置一个锚点 也就是单元格右上角红色三角 XSSFClientAnchor clientAnchor = creation.createClientAnchor(); //设置一个画布 就是用来显示注释信息的画布 XSSFDrawing drawing = sheet.createDrawingPatriarch(); //设置一个单元格注释 XSSFComment cellComment = drawing.createCellComment(clientAnchor); //声明一个富文本格式 用来设置备注信息字体; XSSFRichTextString test = creation.createRichTextString("备注信息"); //也可设置字体样式 cellComment.setString(test); //end // 3.设置表头,即每个列的列名 String[] titel = {"rowName1","rowName2","rowName3","rowName4"}; // 3.1创建第一行 XSSFRow row = sheet.createRow(0); // 此处创建一个序号列 row.createCell(0).setCellValue("序号"); // 将列名写入 Font redFont = wb.createFont(); redFont.setColor(Font.COLOR_RED);// 红色 int j=0; // 写入正式数据 for (int i = 0; i < listresult.size(); i++) { // 创建行 row = sheet.createRow(i+1); // 序号 row.createCell(0).setCellValue(i+1); // 银行名称 row.createCell(1).setCellValue(listresult.get(i).get("rowKey1").toString()); sheet.autoSizeColumn(1, true); // 业务类型 row.createCell(2).setCellValue(listresult.get(i).get("rowKey2").toString()); // 异常信息 row.createCell(3).setCellValue(listresult.get(i).get("rowKey3").toString()); // 数量 XSSFCell cell = row.createCell(4); //设置单元格富文本样式; XSSFRichTextString richString = new XSSFRichTextString( "Hello*" ); //richString.applyFont( 0, 6, blueFont ); //设置字体富文本字体样式 可以根据下标设置多个 字体样式 hello word 可以让hello 显示红色 其他显示蓝色 根据字符下标; richString.applyFont( 4, 6, redFont ); cell.setCellValue(richString); //设置单元格注释信息 cell.setCellComment(cellComment); } /** * 上面的操作已经是生成一个完整的文件了,只需要将生成的流转换成文件即可; * 下面的设置宽度可有可无,对整体影响不大 */ // 设置单元格宽度 int curColWidth = 0; for (int i = 0; i <= titel.length; i++) { // 列自适应宽度,对于中文半角不友好,如果列内包含中文需要对包含中文的重新设置。 sheet.autoSizeColumn(i, true); // 为每一列设置一个最小值,方便中文显示 curColWidth = sheet.getColumnWidth(i); if(curColWidth<2500){ sheet.setColumnWidth(i, 2500); } // 第3列文字较多,设置较大点。 sheet.setColumnWidth(3, 8000); } return wb; } //下载excel 文件 private static String downUserList(List<Map<String,Object>> listresult){ // getTime()是一个返回当前时间的字符串,用于做文件名称 String name ="ExcelTest"; // csvFile是我的一个路径,自行设置就行 String filePath = "D:/GitRepository/P2M.PURE/com.sysware.p2m.core/com/sysware/p2m/core/office/excel/excelTemplate/excelTemplate166.xls"; // 1.生成Excel XSSFWorkbook userListExcel = createUserListExcel(listresult); try{ // 输出成文件 File file = new File(filePath); if(file.exists() || !file.isDirectory()) { file.mkdirs(); } // TODO 生成的wb对象传输 FileOutputStream outputStream = new FileOutputStream(new File(s)); userListExcel.write(outputStream); outputStream.close(); }catch(Exception e){ e.printStackTrace(); } return name; }