当前位置:科学 > 正文
干货: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探索事件之后,许多的研究人员都会认真的去分析此事件发生的前因后果,去搜集一些相关的证据,但是其实我们还能够从这些事件 【详细】
汽车吸尘器好用吗?汽车吸尘器真的有用么?
现在随着大家都逐渐拥有了自己的汽车,很多人对汽车的一些相关工具也还是逐步的关注了起来。其中车载吸尘器就是大家关注度最高的产品,那么 【详细】
航天员太空生活舱内景曝光 在太空中航天员之间是如何交流的呢?
航天员太空生活舱内景曝光,航天员在天上是如何生活的呢?中国载人航天工程空间站、神舟系列载人飞船、天舟系列货运飞船和长征系列运载火箭 【详细】
稀土镁合金简介 稀土镁合金的未来发展趋势
稀土镁合金一般指稀土元素的镁合金。镁合金是工程应用中最轻的金属结构材料,具有低密度、高比强度、高比刚度、高减震、易加工、易回收等优 【详细】
相关新闻
- 干货:Excel中插入图片的两种方式
- 同配骁龙8+处理器,红米一加展开肉搏战,没赢家,但输家已出现-今亮点
- 每日简讯:iPhone14标准版全新配色曝光,即将推出
- 全球今亮点!中兴通讯发布绿色5G核心网白皮书,助力全行业低碳可持续发展
- 影驰RTX 3090金属大师亮相 旗舰级显卡 为创意加速
- 一键root大师教你安卓手机怎么root方法_当前热议
- 天天观点:适马发布全球体积最小全画幅无反相机
- 机皇之所以是机皇,并非性能是唯一因素,关键在于“创新” 全球实时
- 手机“偷看”你的隐私?这几招可以解除
- 15万级插混SUV王者之争 哈弗二代大狗和比亚迪宋PLUS DM-i谁能夺冠?
- 魅族Flyme 体验版更新:升级OneMind 3.0 息屏新增电量显示
- 松下净水机,深层过滤确保饮水健康 天天报资讯
- 用了两年多的iPhone 8,日用无压力,但有个缺点|热点聚焦
- Precision 7520移动工作站|强劲性能,匹配你的天才构思-全球快资讯
- 砸100亿秀肌肉,京东盯上了拼多多,“百亿补贴”商标该归谁?_观焦点
- 保姆级教学!彻底学会时间复杂度和空间复杂度
- (经济)当冰淇淋遇到“智能制造”-探访日产900万支冰淇淋的“灯塔工厂” 世界快看点
- 信息:一对多查找,Vlookup公式要淘汰了,Filter简单好用!
- 工信部公布2022年工业互联网试点示范名单!鞍钢集团两个项目入选|天天热文
- 斗牛犬无线蓝牙音响——行走的霸气“斗牛”