excel加入图片水印(干货:Excel中插入图片的两种方式)Excel教程 / Excel图片与图表插入教程...

wufei123 发布于 2024-02-18 阅读(114)


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

传统POIorg.apache.poipoi-ooxml4.1.2

>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

classPOIExport{        private Workbook workbook;        publicstaticvoidmain(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        */

publicstatic Workbook getWorkBook(String filePath)throws Exception {        Workbook workbook = null

;        if (StringUtils.isBlank(filePath)) {        // throw new RuntimeException("路径错误!");        }

elseif (filePath.toLowerCase().endsWith("xls")) {        workbook = new HSSFWorkbook(new FileInputStream(filePath));        }

elseif (filePath.toLowerCase().endsWith("xlsx")) {        workbook = new XSSFWorkbook(new FileInputStream(filePath));        }

else {        // throw new RuntimeException("路径错误!");        }        return workbook;        }        }

e-iceblue(推荐)e-icebluespire.xls.free

5.1.0package com.test.other.demo.report;        import com.spire.xls.*;        /**        * e-iceblue 往excel插入图片        */

publicclassEiceBlueExport {        publicstaticvoidmain(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        */publicstaticvoidtransFileToPdf(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);        }        }

方案对比1poi对xlxs xls不同版本有不同的语法,需要单独写个方法去获取WorkBook,而e-iceblue直接封装好方法,傻瓜式操作2poi需设置图片类型,文件流操作,而e-iceblue直接封装好方法,傻瓜式操作

3e-iceblue有丰富的文档转换工具,如转为PDF,如以上代码,我这边转换的pdf,看了下再也不用在***网站转pdf了,骚的一批,当然也封装了其他文档转换,这里不赘述

标签:  Excel插入图片 

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

河南中青旅行社综合资讯 奇遇综合资讯 盛世蓟州综合资讯 综合资讯 游戏百科综合资讯 新闻99323