0
点赞
收藏
分享

微信扫一扫

ExcelExportUtil基于模板导出excel&POI导出excel

夹胡碰 2022-01-12 阅读 159

1.使用ExcelExportUtil基于模板导出excel数据,listToExcel 

<dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-spring-boot-starter</artifactId>
            <version>4.2.0</version>
</dependency>

第一步,导入依赖没啥好说的;

第二步,查询数据库或es数据组装成list对象;

第三步,填充Map<String, Object> excelMap = new HashMap<>();

数据key和excel模板对应,如果一次导出多个,可以用index区分;

HttpServletResponse response;
TemplateExportParams params = new TemplateExportParams("doc/模板路径.xlsx",true);

//上面的步骤都是为了填充数据,看个人需求组装数据结构

try{
Workbook workBook= ExcelExportUtil.exportExcel(params, excelMap);
//删除没有数据的sheet
//workBook.removeSheetAt(workBook.getSheetIndex(entry.getKey()));

response.setContentType("application/octet-stream");
response.setHeader("Content-disposition","attachment;filename=" + URLEncoder.encode("模板名称.xlsx", "UTF-8"));
response.flushBuffer();
OutputStream out = response.getOutputStream();
workBook.write(out);
}finally{
    workBook.close();
}

2.基于org.apache.poi的XSSFWorkbook导出

第一步,导入依赖

         <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.1</version>
        </dependency>

第二步,上图哈哈

public void ExcelExport(HttpServletResponse response) {
        //创建工作簿对象
        XSSFWorkbook workbook = new XSSFWorkbook();
        //创建工作表
        XSSFSheet sheet = workbook.createSheet("sheet1");
        //合并单元格(看需求是否需要合并的) 开始行,最后一行,开始列,最后一列
        //CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol)
        CellRangeAddress range_1 = new CellRangeAddress(0, 0, 0, 4);
//        CellRangeAddress range_2 = new CellRangeAddress(1, 1, 0, 2);
//        CellRangeAddress range_2_1 = new CellRangeAddress(1, 1, 3, 4);
        sheet.addMergedRegion(range_1);
//        sheet.addMergedRegion(range_2);
//        sheet.addMergedRegion(range_2_1);

        //创建第一行
        XSSFRow row_0 = sheet.createRow(0);
        XSSFCell cell_0 = row_0.createCell(0);
        CellStyle style_0 = workbook.createCellStyle();
        //设置水平对齐方式为居中对齐
        style_0.setAlignment(HorizontalAlignment.CENTER);
        //设置垂直对齐方式为居中对齐
        style_0.setVerticalAlignment(VerticalAlignment.CENTER);
        //todo 还可以设置边框的样式,这里只设置了右边的,以此类推
        style_0.setBorderLeft(BorderStyle.THIN);
        //设置字体样式
        Font font_0 = workbook.createFont();
        //设置字体大小
        font_0.setFontHeightInPoints((short) 20);
        //设置加粗
        font_0.setBold(true);
        //设置字体颜色,这里我用了红色
        font_0.setColor(IndexedColors.RED.getIndex());
        style_0.setFont(font_0);
        //设置单元格样式
        cell_0.setCellStyle(style_0);
        cell_0.setCellValue("第一行的内容");
        //......省略很多内容
        //最后设置行的高度和列的宽度
        sheet.setDefaultRowHeight((short) 450);
        //setColumnWidth(int columnIndex, int width) 哪一列,宽度是多少,注:索引都是从0开始
        sheet.setColumnWidth(1, 20 * 256);
        response.setContentType("application/octet-stream");
        try {
            response.setHeader("Content-disposition",
                    "attachment;filename=" + java.net.URLEncoder.encode("jm.xlsx", "UTF-8"));
            response.flushBuffer();
            workbook.write(response.getOutputStream());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

就是这么简单 没了

举报

相关推荐

0 条评论