easypoi利用模板导出图片到Excel;解决easypoi导出图片到合并单元格单元格被拉伸的问题

easypoi的封装是非常好的,用起来很简单。

官方教程地址:http://easypoi.mydoc.io/

但是在使用模板导出图片到合并单元格时出问题了,官网找了好几遍没找到方案。

其实官方早就实现了只是没有直接的文档说明。解决办法:

走起:

先上图片:

1、模板

 2、导出效果

 

3、文件存放位置

4、代码实现

坑就在这里,官网里有这个模板导出图片的例子,但是是导出到单个单元格。没说合并单元格的情况下怎么导出。所以我在模板里合并了单元格,再导出的图片,结果图片只填充第一个单元格,并没有填充满整个合并后的单元格。然后就设置宽和高,结果只是撑大了第一个单元格。网上都查遍了也没有解决方案。最后自己仔细看了看ImageEntity这个类,测试后发现,通过ImageEntity再去合并单元格就ok了。在此呈上解决方案。

import cn.afterturn.easypoi.entity.ImageEntity;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
import org.apache.poi.ss.usermodel.Workbook;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class ExcelTest {

    public static void main(String[] args) {

        //第二个参数true是为了开启多sheet扫描,就是同一个xls文件中有多个工作表的时候。
        // false则只填充一个sheet。我这里只有一个sheet可以为false。也可以为true
        TemplateExportParams params = new TemplateExportParams("E:\\easypoi\\temp.xlsx", true);
        //创建map存放需要替换的内容
        Map<String,Object> map = new HashMap<>();
        map.put("name","groot");//添加姓名
        //下边开始添加图片。有几个注意点。
        ImageEntity image = new ImageEntity();
        //#1、大小尽量不要在这里设置、在模板里调整好大小更好。不设置图片大小就会直接填充满模板里的单元格。
//        image.setHeight(200);
//        image.setWidth(500);
        //#2、这里是设置合并单元格,但是千万不要再模板你提前合并单元格。合并了这里会报错。行合并多少个格子在这里设置。
        image.setRowspan(3);//向下合并三行
        image.setColspan(2);//向右合并两列
        //添加图片
        image.setUrl("E:\\easypoi\\1.jpg");
        map.put("desktop",image);//放入map
        //放入desktop图片
        ImageEntity image2 = new ImageEntity();
//        image.setHeight(200);
//        image.setWidth(500);
        image2.setRowspan(3);
        image2.setUrl("E:\\easypoi\\2.png");
        map.put("qrcode",image2);
        //数据载入,生成excel文件
        Workbook book = ExcelExportUtil.exportExcel(params, map);
        //创建保存路径、这不可以省略、如果路径存在了可以不用创建。这里是防止路径不存在的
        File savefile = new File("E:\\easypoi\\");
        if (!savefile.exists()) {
            savefile.mkdirs();
        }
        try {
            //设置导出文件名、创建输出流
            FileOutputStream fos = new FileOutputStream("E:\\easypoi\\excel.xlsx");
            //导出excel文件
            book.write(fos);
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

5、pom配置依赖(貌似所有的都在这了,这个功能只需要使用easypoi-base即可)

            <!-- https://mvnrepository.com/artifact/cn.afterturn/easypoi-base -->
            <dependency>
                <groupId>cn.afterturn</groupId>
                <artifactId>easypoi-base</artifactId>
                <version>4.1.2</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/cn.afterturn/easypoi-annotation -->
            <dependency>
                <groupId>cn.afterturn</groupId>
                <artifactId>easypoi-annotation</artifactId>
                <version>4.1.2</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/cn.afterturn/easypoi-web -->
            <dependency>
                <groupId>cn.afterturn</groupId>
                <artifactId>easypoi-web</artifactId>
                <version>4.1.2</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/cn.afterturn/easypoi -->
            <dependency>
                <groupId>cn.afterturn</groupId>
                <artifactId>easypoi</artifactId>
                <version>4.1.2</version>
                <type>pom</type>
            </dependency>

 

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值