当前位置:科学 > 正文

干货:Excel中插入图片的两种方式

2023-03-04 15:57:03  来源:Java架构学习指南


【资料图】

背景

业务中,客户需要导出各种数据统计报表,如果客户要求,我希望导出的报表中能插入这些数据的统计图表该如何操作,如图:

传统POI

<dependency>    <groupId>org.apache.poi</groupId>    <artifactId>poi-ooxml</artifactId>    <version>4.1.2</version></dependency>
package com.test.other.demo.report;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.*;import org.apache.poi.util.IOUtils;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import org.junit.platform.commons.util.StringUtils;import java.io.*;/** * POI 往excel插入图片 */public class POIExport {    private Workbook workbook;    public static void main(String[] args) throws Exception {        Workbook workbook = getWorkBook("/Users/hui.yang/Desktop/excel演示/poi/演示1.xlsx");        Sheet sheet = workbook.getSheet("sheet1");        InputStream inputStream = new FileInputStream("/Users/hui.yang/Desktop/excel演示/poi/演示图表1.png");        byte[] bytes = IOUtils.toByteArray(inputStream);        // 这里根据实际需求选择图片类型        int pictureIdx = workbook.addPicture(bytes, Workbook.PICTURE_TYPE_JPEG);        CreationHelper helper = workbook.getCreationHelper();        ClientAnchor anchor = helper.createClientAnchor();        Drawing drawing = sheet.createDrawingPatriarch();        anchor.setRow1(10); //插入行        anchor.setCol1(0); // 插入列        // 插入图片        Picture pict = drawing.createPicture(anchor, pictureIdx);        // 调整图片占单元格百分比的大小,1.0就是100%        pict.resize(8, 5);        //临时缓冲区        ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();        //创建临时文件        try {            workbook.write(byteArrayOut);        } catch (IOException e) {            e.printStackTrace();        } finally {            workbook.close();        }        byte[] bookByteAry = byteArrayOut.toByteArray();        File file = new File("/Users/hui.yang/Desktop/excel演示/poi/演示插入结果.xlsx");        if (!file.getParentFile().exists()) {            file.getParentFile().mkdirs();        }        if (!file.exists()) {            file.createNewFile();        }        FileOutputStream fos = new FileOutputStream(file);        fos.write(bookByteAry, 0, bookByteAry.length);        fos.flush();        fos.close();    }    /**     * 获取workBoot 兼容xlsx xls     */    public static Workbook getWorkBook(String filePath) throws Exception {        Workbook workbook = null;        if (StringUtils.isBlank(filePath)) {            // throw new RuntimeException("路径错误!");        } else if (filePath.toLowerCase().endsWith("xls")) {            workbook = new HSSFWorkbook(new FileInputStream(filePath));        } else if (filePath.toLowerCase().endsWith("xlsx")) {            workbook = new XSSFWorkbook(new FileInputStream(filePath));        } else {            //   throw new RuntimeException("路径错误!");        }        return workbook;    }}

e-iceblue(推荐)

<dependency>    <groupId>e-iceblue</groupId>    <artifactId>spire.xls.free</artifactId>    <version>5.1.0</version></dependency>
package com.test.other.demo.report;import com.spire.xls.*;/** * e-iceblue 往excel插入图片 */public class EiceBlueExport {    public static void main(String[] args) {        //创建Workbook实例        Workbook workbook = new Workbook();        //加载Excel文档        workbook.loadFromFile("/Users/hui.yang/Desktop/excel演示/e-iceblue/演示1.xlsx");        //获取第一张工作表        Worksheet sheet = workbook.getWorksheets().get(0);        //设置图表插入的位置        ExcelPicture pic = sheet.getPictures().add(10, 1, "/Users/hui.yang/Desktop/excel演示/e-iceblue/演示图表1.png");        //设置图片的宽度和高度        pic.setWidth(600);        pic.setHeight(120);        //保存文档        workbook.saveToFile("/Users/hui.yang/Desktop/excel演示/e-iceblue/演示插入结果.xlsx", ExcelVersion.Version2013);        //文档转pdf        transFileToPdf("/Users/hui.yang/Desktop/excel演示/e-iceblue/庞源在线-安全-安全周报-20230303130801.xlsx");    }    /**     * 转pdf     */    public static void transFileToPdf(String fillPath) {        Workbook wb = new Workbook();        wb.loadFromFile(fillPath);        wb.getWorksheets().get(0);        ConverterSetting converterSetting = new ConverterSetting();        converterSetting.setSheetFitToPage(true);        wb.setConverterSetting(converterSetting);        //调用方法保存为PDF格式        wb.saveToFile("/Users/hui.yang/Desktop/excel演示/e-iceblue/庞源在线-安全-安全周报-20230303130801.pdf", FileFormat.PDF);    }}

方案对比

1 poi对xlxs xls不同版本有不同的语法,需要单独写个方法去获取WorkBook,而e-iceblue直接封装好方法,傻瓜式操作2 poi需设置图片类型,文件流操作,而e-iceblue直接封装好方法,傻瓜式操作3 e-iceblue有丰富的文档转换工具,如转为PDF,如以上代码,我这边转换的pdf,看了下再也不用在***网站转pdf了,  骚的一批,当然也封装了其他文档转换,这里不赘述

关键词: Excel

推荐阅读

通用设备介绍 通用设备包括什么?

通用设备介绍一、通用设备。办公和商务通用设备,包括文化办公机械、消防设备、电机、变压器、锅炉、空调设备、清洁卫生设备、通讯设备、视 【详细】

美国UFO探索事件 全面解析美国UFO探索事件

一般在发生UFO探索事件之后,许多的研究人员都会认真的去分析此事件发生的前因后果,去搜集一些相关的证据,但是其实我们还能够从这些事件 【详细】

汽车吸尘器好用吗?汽车吸尘器真的有用么?

现在随着大家都逐渐拥有了自己的汽车,很多人对汽车的一些相关工具也还是逐步的关注了起来。其中车载吸尘器就是大家关注度最高的产品,那么 【详细】

航天员太空生活舱内景曝光 在太空中航天员之间是如何交流的呢?

航天员太空生活舱内景曝光,航天员在天上是如何生活的呢?中国载人航天工程空间站、神舟系列载人飞船、天舟系列货运飞船和长征系列运载火箭 【详细】

稀土镁合金简介 稀土镁合金的未来发展趋势

稀土镁合金一般指稀土元素的镁合金。镁合金是工程应用中最轻的金属结构材料,具有低密度、高比强度、高比刚度、高减震、易加工、易回收等优 【详细】

相关新闻

关于我们  |  联系方式  |  免责条款  |  招聘信息  |  广告服务  |  帮助中心

联系我们:85 572 98@qq.com备案号:粤ICP备18023326号-40

科技资讯网 版权所有