干货Excel中插入图片的两种方式
背景 业务中,客户需要导出各种数据统计报表,如果客户要求,我希望导出的报表中能插入这些数据的统计图表该如何操作,如图:
传统POI org.apache.poi poi-ooxml 4.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 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(推荐) e-iceblue spire.xls.free 5.1.0 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了, 骚的一批,当然也封装了其他文档转换,这里不赘述
元宇宙招聘热的冷思考真需求or假风口本报记者李玉洋李正豪上海报道随着传统互联网红利的流失,元宇宙成了撩动各方心弦的难得机遇。据澎湃新闻报道,在互联网大厂降本增效优化人员的背景下,多家互联网游戏类企业却计划在近期扩大元
三大品牌手机集中发布新品这些功能成为热点荣耀继华为苹果之后也发布了自己的新品,今年的9月份可谓精彩纷呈。华为苹果君把搭载卫星通信作为新机的新功能,OPPO发布自研系统,荣耀发力生态能力,一时间销烟弥漫。如今的手机市场大盘
羊了个羊爆红一周难度天花板互联网流量新贵骗子游戏过去一周,有一个世纪难题始终困扰着我,那就是到底谁能闯过羊了个羊第二关?!自从一周前出于好奇点开了这个游戏,平均每天花费四五个小时扑在上面,魔性BGM已经成为我的晚安曲,却也只换来
深入人心的文案1不知道别人是谁并不可怕,不知道自己是谁才是真正的可怕。2日久不一定生情,但日久一定见人心。3真正聪明的人简单真诚,自以为是的人往往自欺欺人。4生命的旅程中会有无数次的挣扎,但站起
文坛有难网友速回,瞻仰网友的风采1。月亮沉入了海底,碎成大海的鳞探听鲸落的秘密,舀一勺月光揉碎在梦境里星星也失去了踪迹,晃碎了蓝色梦曦我多想片刻拥有你等一个艳阳天,等你说与我相恋。不曾想,这一等,便等了三五八年,
谈恋爱这么麻烦,我还是不要谈了配音森然20220918有些不爱是有迹可循的,或许就从一次次不麻烦你开始。曾经你觉得这些麻烦是麻烦,等你发现没有了这样或那样的麻烦时,爱已经走远,而你才后知后觉。01你能不能长点记
三观不同的人是无法做朋友的就像我说大海很美你说里面死了很多人放弃吧,三观不同不能在一起的。即便是喜欢也不可以因为最终会分道扬镳的事情是这样,我把秘密告诉了她,然后我们关系好像并没有更进一步,反而平淡如水,像跟往常一样他在跟我就聊天的同时,发
认清一个人,要看这5点!都说路遥知马力,日久见人心。那是因为,有时候人很擅长伪装,在不同的环境中展现出不同的一面。我们一生之中会遇到无数人,有人擦肩而过,有人同行一程,有人相伴一生,以下这5点,帮你看清身
清代名臣陈廷敬故居清代名臣陈廷敬,皇城相府其故居。位于山西晋城市,阳城县内北留镇。背山临水依山建,官宅民居建筑群。康熙两次下榻此,皇城相府而得名。共有院落十六座,面积三万六千平。错落有致布局巧,国家
自驾游记一宿的尴尬避暑山庄南戴河的螃蟹北戴河第一篇从沙漠到海边(续)4。一宿的尴尬靠着导航的指引,晚上8点多找到了预订的旅店。这个店开在小区里,一个个小隔间就是居住的楼房改造成的,条件说不上好,不带洗手间,只有一张大床两个小
寻访古木奇缘湖北日报全媒记者刘汉泽通讯员喻玲魏家锋古树是美景,是文化,是大自然留下的瑰宝。名木是活的文物,是社会历史进程的活档案,是探索古老文明的活教材。神农架因林而建因林而兴,和森林树木有着
科与幻的摆渡人2021年7月,科影融合专委会探班拍摄中的流浪地球2剧组。左二为王姝,左三为流浪地球2导演郭帆。2018年8月,王姝在世界科技创新论坛专访2015年诺贝尔物理学奖获得者及电影星际穿
在美中国公民,提前做好应对准备!中国驻美国大使馆微信公众号17日发布消息,提醒在美中国公民注意防范冬季风暴等极端天气。据美国国家气象服务局消息,预计近日将有一场冬季风暴给美国西南部以及五大湖地区等20个州带来大雪
e公司观察互联网巨头为何都要做外卖?继抖音传出要做外卖业务后,微信正在深圳和广州两地测试小程序快送服务。中国最大的三家互联网公司都要做外卖。加上美团,也就是排名前四互联网巨头都在或者即将做外卖。h2当年美团饿了么百度
2022年全球大宗粮油作物减产1。3,意味着什么树线图2022年全球大宗粮油作物减产1。3,为近十年来第二大降幅。受全球不利气候因素影响欧洲地区68月份有非常严重的热浪影响,以及非洲东部高原地区美国西部南美地区不同程度上受旱灾影响,我
经济日报金观平推动财力真正下沉基层近年来,基层财政收支和三保(保基本民生保工资保运转)问题受到广泛关注。中央经济工作会议强调,要加大中央对地方的转移支付力度,推动财力下沉,做好基层三保工作。落实这一部署,要加力推进
吃转胎丸求女翻男,90后父母正在制造双性儿!生了一个女儿,去年流过一个女胎,前天查肚子里好像又是个丫头,跪求转胎药,圆我全家儿子梦。这样的帖子,和对转胎丸的迷信,依然会出现在2020年的孕产论坛上。出于民间文化的强大影响,时
和合宝宝护理宝宝肠胀气!别慌,先试试这几招!宝宝快满月了,最近每天下午或者傍晚时不时哼哼唧唧,连抻带扭,很不舒服的样子。宝宝最近总是晚上哭闹,小眉头都紧紧皱在一起,感觉是不舒服,怎么哄都不好使。宝宝一个多月,一到下午的时候没
连体人中如果一个人离世,剩下那一个会怎么样呢?这是一种来自母体,但极为罕见的妊娠现象。我们都知道女性怀孕,是因为精子与卵子,在母体内结合成受精卵。而双胞胎需要由单独的一个受精卵,在最初的两个星期内完全分离。那么连体人,很显然就
春节前后迎儿童银行卡办理高峰,成都一银行今年已办理上万张来源红星新闻网我过年钱都交给妈妈,让她给我保管。我过年钱存到我的银行卡里,现在有好几万了!春节过后,小朋友见面也会讨论自己收到的压岁钱。有的孩子压岁钱被家长以保管的名义收了上去,有
人的第一次经历人的第一次有很多种,例如第一次走路第一次说话第一次上学第一次恋爱等等。无论是哪一种第一次,都是人生中的一个重要时刻,会对人的一生产生深远的影响。第一次走路,是每个人都会经历的一件事
交通安全第一课在黄龙水磨坊幼儿园开讲阳光讯(兰婧超记者郑玮)为加强儿童的交通安全意识,提升幼儿交通安全防范能力。2月14日,黄龙县公安局交通管理大队组织宣传科及城区执勤中队民警走进辖区水磨坊幼儿园开展交通安全伴你童行