java poi导出自定义可拓展列头Excel(带图片)

@PostMapping("/exportDHT")
    public Response exportDHT(String dateS, String url, HttpServletResponse response) {
        Workbook wb = stationFuheService.exportDHT(dateS,url);
        try {
            response.setContentType("application/octet-stream");
            ServletOutputStream os = response.getOutputStream();
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("大会堂负荷.xlsx", "utf-8"));
            wb.write(os);
            os.flush();
            os.close();
            return Response.success("开关遥控记录导出成功");
        } catch (IOException e) {
            e.printStackTrace();
            return Response.failure("开关遥控记录导出失败");
        }
    }

实现类

@Override
    public Workbook exportDHT(String dateS, String url) {
        if(ObjectUtil.isEmpty(dateS)){
            dateS = DateTimeUtils.getYesterday().concat(","+DateTimeUtils.getToday());
        }
        List<String> dateList = Arrays.asList(dateS.split(","));
        //制作结构
        List<String> flowSheet = this.baseMapper.getFlowSheet();

        Workbook wb = new XSSFWorkbook();
        // 创建表格
        Sheet sheet = wb.createSheet("大会堂负荷");
        CellStyle cellStyleHead = wb.createCellStyle();
        CellStyle cellStyle = wb.createCellStyle();
        // 居中
        cellStyleHead.setAlignment(HorizontalAlignment.LEFT);
        // 设置背景色
        cellStyleHead.setFillForegroundColor(IndexedColors.GREY_40_PERCENT.getIndex());
        cellStyleHead.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        // 设置字体大小
        Font font = wb.createFont();
        font.setFontHeightInPoints((short) 12);
        cellStyleHead.setFont(font);
        cellStyle.setFont(font);
        // 创建标题行
        Row row = sheet.createRow(0);
        List<String> heads = Arrays.asList("时间,".concat(dateS).split(","));
        //列头
        for (int j = 0; j < heads.size(); j++) {
            sheet.setColumnWidth(j, heads.get(j).getBytes().length * 2 * 300);
            Cell cell = row.createCell(j);
            cell.setCellStyle(cellStyleHead);
            cell.setCellValue(heads.get(j));
        }
        //第一列固定数据
        for (int i = 0; i < flowSheet.size(); i++) {
            // 创建行
            row = sheet.createRow(i + 1);
            // 创建单元格(列号)
            row.createCell(0).setCellValue(flowSheet.get(i));
            //拓展列数据
            for (int k = 0; k < dateList.size(); k++) {
                List<FuheVo> list = this.baseMapper.queryStationFuHeByDate(dateList.get(k));
                // 创建单元格(列号)
                row.createCell(k + 1).setCellValue(list.get(i).getFuhe());
            }
        }
        if(ObjectUtil.isNotEmpty(url)){
            byte[] bytes = FileUtils.getImageFromNetByUrl(url);
            int pictureIdx = wb.addPicture(bytes, Workbook.PICTURE_TYPE_JPEG);
            CreationHelper helper = wb.getCreationHelper();
            Drawing<?> drawing = sheet.createDrawingPatriarch();
            ClientAnchor anchor = helper.createClientAnchor();
            // 设置图片起始列
            anchor.setCol1(4);
            // 设置图片起始行
            anchor.setRow1(2);
            Picture picture = drawing.createPicture(anchor, pictureIdx);
            // 调整图片大小
            picture.resize();
        }
        return wb;
    }

效果图

需求要求:

注意:前端入参为图像地址,图像是盖在上面,没有指定存储到具体单元格,此方法适用于针对性比较强的需求,对象导入可以用easyExcel更简单.

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 在pom.xml中添加poipoi-ooxml的依赖: ```xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> ``` 2. 创建Workbook和Sheet对象,并设置表和数据: ```java Workbook workbook = new XSSFWorkbook(); Sheet sheet1 = workbook.createSheet("Sheet1"); Sheet sheet2 = workbook.createSheet("Sheet2"); //设置表 Row row1 = sheet1.createRow(0); row1.createCell(0).setCellValue("姓名"); row1.createCell(1).setCellValue("年龄"); Row row2 = sheet2.createRow(0); row2.createCell(0).setCellValue("学科"); row2.createCell(1).setCellValue("成绩"); //设置数据 Row row3 = sheet1.createRow(1); row3.createCell(0).setCellValue("张三"); row3.createCell(1).setCellValue(20); Row row4 = sheet2.createRow(1); row4.createCell(0).setCellValue("语文"); row4.createCell(1).setCellValue(80); ``` 3. 将Workbook对象写入输出流: ```java response.setHeader("Content-Disposition","attachment;filename=test.xlsx"); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); OutputStream outputStream = response.getOutputStream(); workbook.write(outputStream); outputStream.flush(); outputStream.close(); ``` 完整代码: ```java @RequestMapping("/export") public String export(HttpServletResponse response) throws IOException { Workbook workbook = new XSSFWorkbook(); Sheet sheet1 = workbook.createSheet("Sheet1"); Sheet sheet2 = workbook.createSheet("Sheet2"); //设置表 Row row1 = sheet1.createRow(0); row1.createCell(0).setCellValue("姓名"); row1.createCell(1).setCellValue("年龄"); Row row2 = sheet2.createRow(0); row2.createCell(0).setCellValue("学科"); row2.createCell(1).setCellValue("成绩"); //设置数据 Row row3 = sheet1.createRow(1); row3.createCell(0).setCellValue("张三"); row3.createCell(1).setCellValue(20); Row row4 = sheet2.createRow(1); row4.createCell(0).setCellValue("语文"); row4.createCell(1).setCellValue(80); response.setHeader("Content-Disposition","attachment;filename=test.xlsx"); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); OutputStream outputStream = response.getOutputStream(); workbook.write(outputStream); outputStream.flush(); outputStream.close(); return "success"; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值