c#使用EPPlus将图片流嵌入到Excel实现示例

 更新时间:2023年12月18日 14:09:05   作者:谭广健  
这篇文章主要为大家介绍了c#使用EPPlus将图片流嵌入到Excel实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

引言

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

EPPlus秘籍之Excel导出之图表导出

弄个License

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

ExcelPackage.LicenseContext = OfficeOpenXml.LicenseContext.NonCommercial;

这样就解决License的问题。好,到主题了,因为我们的图片都是放在云服务器,直接引用可以,但无互联网就不行,那怎么办。

办法很简单将图片嵌入到Excel解决,那又怎么嵌入的?研究了个把小时,终于有思路了。

图片采集的功能

将云服务器上的图片转化为文件流,然后通过文件流写入到Excel。这又怎么把云服务器的图片转为文件流了,有了之前写过一个图片采集的功能

核心代码

// 将图片转为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这个就没后继试,如果图片多可以再研究。

上代码吧

 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里面了。

以上就是c#使用EPPlus将图片流嵌入到Excel实现示例的详细内容,更多关于c# EPPlus图片流嵌入Excel的资料请关注脚本之家其它相关文章!

相关文章

  • RandomId生成随机字符串详解实例

    RandomId生成随机字符串详解实例

    本文主要介绍RandomId 生成随机字符串的方法,大家参考使用吧
    2013-12-12
  • List转换成DataSet实现代码

    List转换成DataSet实现代码

    怎样把List转换成DataSet本人很是疑惑,于是搜集整理一番,需要的朋友可以参考下
    2012-12-12
  • C#中Linq的入门教程

    C#中Linq的入门教程

    这篇文章介绍了C#中Linq的基础操作,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • C#使用Task实现并行编程

    C#使用Task实现并行编程

    这篇文章介绍了C#使用Task实现并行编程的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • C#实现WinForm全屏置顶的示例代码

    C#实现WinForm全屏置顶的示例代码

    我们在运行一些 Windows 应用程序的时候,需要将其运行在窗体置顶的模式,并且进入全屏状态,本文将介绍如何使用 C# 来实现 WinForm 的全屏置顶的基本功能,感兴趣的可以了解下
    2024-12-12
  • C#实现开机自动启动设置代码分享

    C#实现开机自动启动设置代码分享

    这篇文章主要介绍了C#实现开机自动启动设置代码分享,本文直接给出实现代码,需要的朋友可以参考下
    2015-07-07
  • C#实现高性能拍照与水印添加功能完整方案

    C#实现高性能拍照与水印添加功能完整方案

    在工业检测、质量追溯等应用场景中,经常需要对产品进行拍照并添加相关信息水印,本文将详细介绍如何使用C#实现一个高性能的拍照和水印添加功能,包含完整的代码实现和优化技巧,需要的朋友可以参考下
    2025-09-09
  • C#编程中使用设计模式中的原型模式的实例讲解

    C#编程中使用设计模式中的原型模式的实例讲解

    这篇文章主要介绍了C#编程中使用设计模式中的原型模式的实例讲解,原型模式创建新对象方便快捷,而且可在运行时根据需要通过克隆来添加和去除他们,也可在程序运行是根据情况来修改类内部的数据,需要的朋友可以参考下
    2016-02-02
  • 解决C# X64应用程序中读取WParam溢出的问题

    解决C# X64应用程序中读取WParam溢出的问题

    C#应用程序是AnyCPU的,在一段处理鼠标滚轮WM_MOUSEWHEEL的代码里碰到溢出的问题OverflowException
    2013-04-04
  • C#获取本机IP地址(ipv4)

    C#获取本机IP地址(ipv4)

    本文主要介绍了C#获取本机所有IP地址的方法、C#获取本机IP地址(ipv4)的方法等。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03

最新评论