Java导出Excel带图片

官网地址:EasyPOI

以下是常见的指令:

以下就是模板常用的指令:
三目运算 {{test ? obj:obj2}}
n: 表示 这个cell是数值类型 {{n:}}
le: 代表长度{{le:()}} 在if/else 运用{{le:() > 8 ? obj1 : obj2}}
-fd: 格式化时间 {{fd:(obj;yyyy-MM-dd)}}
fn: 格式化数字 {{fn:(obj;###.00)}}
fe: 遍历数据,创建row
!fe: 遍历数据不创建row
$fe: 下移插入,把当前行,下面的行全部下移.size()行,然后插入
#fe: 横向遍历
v_fe: 横向遍历值
!if: 删除当前列 {{!if:(test)}}
单引号表示常量值 ‘’ 比如’1’ 那么输出的就是 1
&NULL& 空格
&INDEX& 表示循环中的序号,自动添加
]] 换行符 多行遍历导出
sum: 统计数据
cal: 基础的±X% 计算
dict: 字典
i18n: 国际化
{{}}: 表达式里面的数据取值
easypoi不会改变excel原有的样式,如果是遍历,easypoi会根据模板的那一行样式进行复制
————————————————
版权声明:本文为CSDN博主「大胖东」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42583263/article/details/124732187

1、先设置模板导出Excel模板:

2、为方便整理统一写到controller里

​
   /**
     * 导出理论题试题列表
     */
    @PostMapping("/export")
    public void export(HttpServletResponse response, DevelopSearchReqVo reqVo) throws IOException, URISyntaxException {
        Map<String, Object> total = new HashMap<>();
        List<Map<String, Object>> mapList = new ArrayList<>();
        List<DevelopOption> userList = developService.exportDevelopOptionList(reqVo);
        for (DevelopOption developOption : userList) {
            Map<String, Object> map = new HashMap<>();
            //切割<P>标签
            String str = "https://127.0.0.1/file/download/other/2023/05/24/a544e06a-6778-4c87-9afb-f947e6785dc3.jpg";
            // 插入图片
            ImageEntity image = new ImageEntity();
            //设置高度和宽度
            image.setHeight(1500);
            image.setWidth(100);
            //放入url地址
            image.setUrl(str);
            map.put("上面第一张图片对应的字段",image);
            mapList.add(map);
        }
        total.put("mapList",mapList);
        exportExcel(total, "模板名称", "模板名称", "模板位置例:export", response);

    }
​

3、模板导出(可以直接用):


    /**
     * 按模板导出Excel数据(支持文件流读取文件)
     *
     * @param paramsMap       数据
     * @param fileName        模板名称
     * @param goalName        文件名称
     * @param fileTemplateUrl 模板地址
     * @return 文件存储地址
     * @throws Exception
     */
    public String exportExcel(Map<String, Object> paramsMap, String fileName, String goalName, String fileTemplateUrl, HttpServletResponse response) {
        String templateFileName = "";
        try {
            String os = System.getProperty(OS_NAME);
            if (os != null && os.toLowerCase().startsWith(STR_WINDOWS)) {
                templateFileName = this.getClass().getClassLoader().getResource("").getPath();
                // 获取resource目录下的模板位置
                templateFileName = templateFileName.substring(1);
                templateFileName = templateFileName.replace("/", File.separator);
            } else {
                templateFileName = filePath;
            }
            templateFileName = templateFileName + STR_TEMPLATES + File.separator + fileTemplateUrl + File.separator + fileName + ".xlsx";
            // 第二个参数true是为了开启多sheet扫描,就是同一个xls文件中有多个工作表的时候。
            TemplateExportParams params = new TemplateExportParams(templateFileName, true);
            // 数据载入,生成excel文件
            Workbook workbook = ExcelExportUtil.exportExcel(params, paramsMap);
            //写文件流
            response.setCharacterEncoding(STR_UTF8);
            response.setHeader("content-Type", "application/vnd.ms-excel");
            response.setHeader(STR_CONTEND_DISPOSITION, STR_ATTACHMENT + URLEncoder.encode(goalName + ".xlsx", STR_UTF8));
            workbook.write(response.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
            //"按模板导出Excel数据异常:" + e
            return null;
        }
        return goalName;
    }

4、pom文件:

          <!-- poi-tl -->
        <dependency>
            <groupId>com.deepoove</groupId>
            <artifactId>poi-tl</artifactId>
            <version>1.10.0</version>
        </dependency>
        <!-- easy-poi -->
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-base</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>30.1-jre</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>

 导出效果:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个示例代码,可以参考一下: ``` Workbook workbook = new HSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet1"); // 创建图片所在的工作表 Sheet picSheet = workbook.createSheet("PicSheet"); // 在 picSheet 中插入图片 CreationHelper helper = workbook.getCreationHelper(); Drawing drawing = picSheet.createDrawingPatriarch(); ClientAnchor anchor = helper.createClientAnchor(); // 设置图片的起始位置和终止位置 anchor.setCol1(0); anchor.setRow1(0); int pictureIndex = workbook.addPicture(imageBytes, Workbook.PICTURE_TYPE_PNG); Picture picture = drawing.createPicture(anchor, pictureIndex); // 在 sheet 中插入图片 int rownum = 0; Row row = sheet.createRow(rownum++); Cell cell = row.createCell(0); // 设置图片的宽度和高度 int widthUnits = 1024; int heightUnits = 768; sheet.setColumnWidth(0, widthUnits * 32); row.setHeight((short) (heightUnits * 14.25)); // 设置单元格样式 CellStyle style = workbook.createCellStyle(); style.setWrapText(true); cell.setCellStyle(style); // 设置单元格值 cell.setCellValue("图片示例"); // 添加注释 Comment comment = drawing.createCellComment(anchor); comment.setString(helper.createRichTextString("图片示例的注释")); cell.setCellComment(comment); // 将工作簿写入输出流 workbook.write(outputStream); ``` 请注意,你需要提供图片的字节数组,并在代码中使用它来插入图片。此外,你还可以根据需要调整单元格的大小和样式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值