c#使用EPPlus將圖片流嵌入到Excel實現(xiàn)示例
引言
話說好長時間沒用EPPlus進行生成Excel文件,對上的文章也是2019(EPPlus秘籍之Excel導(dǎo)出之圖表導(dǎo)出),之后就有用但都是很簡單的應(yīng)用。這次為什么又提起呢?是因為一開始用FastReport做報表不錯,但后來要求導(dǎo)出到Excel并且要在文件中插入圖片,那就犯難了。因為圖片是放在云服務(wù)器上的,最簡單就做個圖片引用就完事。但問題是導(dǎo)出的Excel后需要在內(nèi)網(wǎng)(與互聯(lián)網(wǎng)斷開)的情況進行處理。那怎么辦呢?有困難就要克服,那只能祭出我們的EPPlus
(EPPlus秘籍之Excel導(dǎo)出之圖表導(dǎo)出)
弄個License
首先上個干貨,就是EPPlus最新版開始商用要求License,那怎么解決,簡單了就是弄個License。。
ExcelPackage.LicenseContext = OfficeOpenXml.LicenseContext.NonCommercial;
這樣就解決License的問題。好,到主題了,因為我們的圖片都是放在云服務(wù)器,直接引用可以,但無互聯(lián)網(wǎng)就不行,那怎么辦。
辦法很簡單將圖片嵌入到Excel解決,那又怎么嵌入的?研究了個把小時,終于有思路了。
圖片采集的功能
將云服務(wù)器上的圖片轉(zhuǎn)化為文件流,然后通過文件流寫入到Excel。這又怎么把云服務(wù)器的圖片轉(zhuǎn)為文件流了,有了之前寫過一個圖片采集的功能
核心代碼
// 將圖片轉(zhuǎn)為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的方法,就是將圖片地址的圖片轉(zhuǎn)為byte字段,然后再寫入MemoryStream類了,就完成圖片的采集。
如何讓寫入
既然內(nèi)存類已經(jīng)獲得圖片的文件流,那又怎么寫入呢?
查看了一圈EPPlus才發(fā)現(xiàn)有2個方法:
- 1、AddPicture 這個直接存入。
- 2、AddPictureAsync 照字面解析應(yīng)該是異步。
2個都可以但AddPictureAsync可能是異步的原因無法進行圖片的定位,當(dāng)然也可能我沒發(fā)現(xiàn),反正我直接用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);大概就是將微信云的圖片轉(zhuǎn)為 http方式,然后將圖片存入文件流;再注入到EPPlus,然后就設(shè)置圖片大小及位置。這里值得一提的是SetPosition,SetPosition可以4個參數(shù),第一個Row就是行,第二個就行起位置,第三個就是列,最后一個就是列起位置。 這樣就完美地將通過EPPlus將圖片嵌入到Excel里面了。
以上就是c#使用EPPlus將圖片流嵌入到Excel實現(xiàn)示例的詳細內(nèi)容,更多關(guān)于c# EPPlus圖片流嵌入Excel的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
List轉(zhuǎn)換成DataSet實現(xiàn)代碼
怎樣把List轉(zhuǎn)換成DataSet本人很是疑惑,于是搜集整理一番,需要的朋友可以參考下2012-12-12
C#實現(xiàn)WinForm全屏置頂?shù)氖纠a
我們在運行一些?Windows?應(yīng)用程序的時候,需要將其運行在窗體置頂?shù)哪J?并且進入全屏狀態(tài),本文將介紹如何使用?C#?來實現(xiàn)?WinForm?的全屏置頂?shù)幕竟δ?感興趣的可以了解下2024-12-12
解決C# X64應(yīng)用程序中讀取WParam溢出的問題
C#應(yīng)用程序是AnyCPU的,在一段處理鼠標(biāo)滾輪WM_MOUSEWHEEL的代碼里碰到溢出的問題OverflowException2013-04-04

