前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >EPPlus将图片流嵌入到Excel

EPPlus将图片流嵌入到Excel

原创
作者头像
谭广健
发布2023-12-14 16:36:20
2110
发布2023-12-14 16:36:20
举报
文章被收录于专栏:谭广健的专栏谭广健的专栏

话说好长时间没用EPPlus进行生成Excel文件,对上的文章也是2019(EPPlus秘籍之Excel导出之图表导出),之后就有用但都是很简单的应用。这次为什么又提起呢?是因为一开始用FastReport做报表不错,但后来要求导出到Excel并且要在文件中插入图片,那就犯难了。因为图片是放在云服务器上的,最简单就做个图片引用就完事。但问题是导出的Excel后需要在内网(与互联网断开)的情况进行处理。那怎么办呢?有困难就要克服,那只能祭出我们的EPPlus

首先上个干货,就是EPPlus最新版开始商用要求License,那怎么解决,简单了就是弄个License。。

代码语言:c#
复制
ExcelPackage.LicenseContext = OfficeOpenXml.LicenseContext.NonCommercial;

这样就解决License的问题。好,到主题了,因为我们的图片都是放在云服务器,直接引用可以,但无互联网就不行,那怎么办。办法很简单将图片嵌入到Excel解决,那又怎么嵌入的?研究了个把小时,终于有思路了。将云服务器上的图片转化为文件流,然后通过文件流写入到Excel。这又怎么把云服务器的图片转为文件流了,有了之前写过一个图片采集的功能,核心代码。

代码语言:c#
复制
// 将图片转为byte字段
 public byte[] DownloadImageAsByteArray(string imageUrl)
 {
     using (var client = new HttpClient())
     {
         var response = client.GetAsync(imageUrl).Result;
         return response.Content.ReadAsByteArrayAsync().Result;
     }
 }
 MemoryStream imageData = new System.IO.MemoryStream(DownloadImageAsByteArray(img_src));

上面的DownloadImageAsByteArray的方法,就是将图片地址的图片转为byte字段,然后再写入MemoryStream类了,就完成图片的采集。

既然内存类已经获得图片的文件流,那又怎么写入呢?查看了一圈EPPlus才发现有2个方法:1、AddPicture 这个直接存入。2、AddPictureAsync 照字面解析应该是异步。2个都可以但AddPictureAsync可能是异步的原因无法进行图片的定位,当然也可能我没发现,反正我直接用AddPicture、然后SetSize及SetPosition完事。AddPictureAsync这个就没后继试,如果图片多可以再研究。上代码吧。

代码语言:c#
复制
 string img_src = ps_list.URL.Replace("cloud://cloud1-8g4e2khfd2b8c508.636c-cloud1-8g4e2khfd2b8c508-1320236877", "http://636c-cloud1-8g4e2khfd2b8c508-1320236877.tcb.qcloud.la");
 MemoryStream imageData = new System.IO.MemoryStream(DownloadImageAsByteArray(img_src));
 ExcelPicture image = worksheet.Drawings.AddPicture(obj.Id, imageData);
 image.SetSize(300, 300);
 image.SetPosition(rowIndex - 1, 30, 9, 30);

大概就是将微信云的图片转为 http方式,然后将图片存入文件流;再注入到EPPlus,然后就设置图片大小及位置。这里值得一提的是SetPosition,SetPosition可以4个参数,第一个Row就是行,第二个就行起位置,第三个就是列,最后一个就是列起位置。 这样就完美地将通过EPPlus将图片嵌入到Excel里面了。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档