Java(若依):Map导出

Controller

/**
 * 导出
 * @param response
 * @param lssjcx
 */
@PostMapping("/export")
public void export(HttpServletResponse response, User user){
    List<Map<String, Object>> resMap = userMapper.list(user);
    ExcelUtilT utilT = new ExcelUtilT();
    utilT.createExcel(response, resMap,"", "");
}

Utils工具类

public class ExcelUtilT {
    private static ExcelUtilT instance = new ExcelUtilT();

    public ExcelUtilT() {
    }

    public static ExcelUtilT getInstance() {
        return instance;
    }

    /**
     * 将 List<Map<String,Object>> 类型的数据导出为 Excel
     * 默认 Excel 文件的输出路径为 项目根目录下
     * 文件名为 filename + 时间戳 + .xlsx
     *
     * @param mapList  数据源(通常为数据库查询数据)
     * @param filename 文件名前缀, 实际文件名后会加上日期
     * @param title    表格首行标题
     */
    public void createExcel(HttpServletResponse response, List<Map<String, Object>> mapList, String filename, String title) {
        // 获取数据源的 key, 用于获取列数及设置标题
        Map<String, Object> map = mapList.get(0);
        Set<String> stringSet = map.keySet();
        List<String> headList = new ArrayList<>(stringSet);
        Collections.sort(headList);  // 表头排序

        // 定义一个新的工作簿
        XSSFWorkbook wb = new XSSFWorkbook();
        // 创建一个Sheet页
        XSSFSheet sheet = wb.createSheet();

        // 设置标题样式
        XSSFCellStyle headWriteCellStyle = getTitleStyle(wb);
        // 设置标题
        setTitle(sheet, headList, headWriteCellStyle);

        // 设置内容样式
        XSSFCellStyle contentWriteCellStyle = getContentStyle(wb);
        // 设置内容
        setContent(sheet, headList, mapList, contentWriteCellStyle);

        // 导出
        export(response, wb, filename);
    }

    public void setTitle(XSSFSheet sheet, List<String> headList, XSSFCellStyle headWriteCellStyle) {
        // 设置标题
        XSSFRow row = sheet.createRow(0);
        sheet.autoSizeColumn(0);
        for (int i = 0; i < headList.size(); i++) {
            XSSFCell cell = row.createCell(i);
            cell.setCellValue(headList.get(i));
            cell.setCellStyle(headWriteCellStyle);
        }
    }

    public XSSFCellStyle getTitleStyle(XSSFWorkbook wb) {
        // 单元格样式类
        XSSFCellStyle headWriteCellStyle = wb.createCellStyle();
        // 设置单元格背景颜色
        headWriteCellStyle.setFillForegroundColor(new XSSFColor(new java.awt.Color(128, 128, 128)));
        headWriteCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        // 文字水平垂直居中
        headWriteCellStyle.setAlignment(HorizontalAlignment.CENTER);  // 水平居中
        headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);  // 垂直居中
        // 设置字体
        XSSFFont headWriteFont = wb.createFont();
        headWriteFont.setFontName("Arial");  // 字体样式
        headWriteFont.setFontHeightInPoints((short) 10);  // 字体大小
        headWriteFont.setBold(true);  // 加粗
        headWriteFont.setColor(IndexedColors.WHITE.getIndex());
        headWriteCellStyle.setFont(headWriteFont);
        return headWriteCellStyle;
    }

    public void setContent(XSSFSheet sheet, List<String> headList, List<Map<String, Object>> mapList, XSSFCellStyle contentWriteCellStyle) {
        XSSFRow rows;
        XSSFCell cells;
        // 循环拿到的数据给所有行每一列设置对应的值
        for (int i = 0; i < mapList.size(); i++) {
            //在这个sheet页里创建一行
            rows = sheet.createRow(i + 1);
            sheet.autoSizeColumn(i + 1);
            //给该行数据赋值
            for (int j = 0; j < headList.size(); j++) {
                String value = mapList.get(i).get(headList.get(j)).toString();
                cells = rows.createCell(j);
                cells.setCellValue(value);
                cells.setCellStyle(contentWriteCellStyle);
            }
        }
    }

    public XSSFCellStyle getContentStyle(XSSFWorkbook wb) {
        // 单元格样式类
        XSSFCellStyle contentWriteCellStyle = wb.createCellStyle();
        // 设置单元格背景颜色
        contentWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
        contentWriteCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        // 文字水平垂直居中
        contentWriteCellStyle.setAlignment(HorizontalAlignment.CENTER);  // 水平居中
        contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);  // 垂直居中
        // 设置边框
        contentWriteCellStyle.setBorderTop(BorderStyle.THIN);
        contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);
        contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);
        contentWriteCellStyle.setBorderRight(BorderStyle.THIN);
        // 设置字体
        XSSFFont headWriteFont = wb.createFont();
        headWriteFont.setFontName("Arial");  // 字体样式
        headWriteFont.setFontHeightInPoints((short) 10);  // 字体大小
        contentWriteCellStyle.setFont(headWriteFont);
        return contentWriteCellStyle;
    }

    public void export(HttpServletResponse response, XSSFWorkbook wb, String filename) {
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        try {
            wb.write(response.getOutputStream());
        } catch (Exception e) {
            System.out.printf("导出Excel异常{}", e.getMessage());
        } finally {
            IOUtils.closeQuietly(wb);
        }
    }
}

前端调用

handleExport(){
  this.download('/xxx/export', {
    ...this.queryParams
  }, `user_${new Date().getTime()}.xlsx`)
},
  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
若依框架提供了一个很方便的Excel操作工具类ExcelUtil,可以使用该工具类自定义导出Excel多sheet页。 以下是一个示例代码: ```java // 创建Excel工作簿 Workbook workbook = new XSSFWorkbook(); // 创建第一个Sheet页 Sheet sheet1 = workbook.createSheet("Sheet1"); // 创建第二个Sheet页 Sheet sheet2 = workbook.createSheet("Sheet2"); // Sheet1中的数据 List<Map<String, Object>> dataList1 = new ArrayList<>(); Map<String, Object> data1 = new HashMap<>(); data1.put("name", "张三"); data1.put("age", 18); dataList1.add(data1); Map<String, Object> data2 = new HashMap<>(); data2.put("name", "李四"); data2.put("age", 20); dataList1.add(data2); // Sheet2中的数据 List<Map<String, Object>> dataList2 = new ArrayList<>(); Map<String, Object> data3 = new HashMap<>(); data3.put("name", "王五"); data3.put("age", 22); dataList2.add(data3); Map<String, Object> data4 = new HashMap<>(); data4.put("name", "赵六"); data4.put("age", 24); dataList2.add(data4); // 定义Sheet1的表头 String[] headers1 = {"姓名", "年龄"}; // 定义Sheet2的表头 String[] headers2 = {"Name", "Age"}; // 在Sheet1中写入数据 ExcelUtil.writeExcelData(sheet1, headers1, dataList1); // 在Sheet2中写入数据 ExcelUtil.writeExcelData(sheet2, headers2, dataList2); // 将工作簿写入文件 FileOutputStream outputStream = new FileOutputStream("test.xlsx"); workbook.write(outputStream); outputStream.close(); ``` 在以上示例代码中,我们首先创建了一个Excel工作簿,然后创建了两个Sheet页,分别是Sheet1和Sheet2。接着,我们定义了Sheet1和Sheet2的数据和表头,并通过ExcelUtil工具类将数据写入到相应的Sheet页中。最后,将工作簿写入文件中即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Monly21

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值