c#使用EPPlus將圖片流嵌入到Excel實現(xiàn)示例
引言
話說好長時間沒用EPPlus進行生成Excel文件,對上的文章也是2019(EPPlus秘籍之Excel導出之圖表導出),之后就有用但都是很簡單的應(yīng)用。這次為什么又提起呢?是因為一開始用FastReport做報表不錯,但后來要求導出到Excel并且要在文件中插入圖片,那就犯難了。因為圖片是放在云服務(wù)器上的,最簡單就做個圖片引用就完事。但問題是導出的Excel后需要在內(nèi)網(wǎng)(與互聯(lián)網(wǎng)斷開)的情況進行處理。那怎么辦呢?有困難就要克服,那只能祭出我們的EPPlus
弄個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可能是異步的原因無法進行圖片的定位,當然也可能我沒發(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)文章
c#獲得目標服務(wù)器中所有數(shù)據(jù)庫名、表名、列名的實現(xiàn)代碼
這篇文章主要介紹了c#獲得目標服務(wù)器中所有數(shù)據(jù)庫名、表名、列名的方法,需要的朋友可以參考下2014-05-05C#?TaskScheduler任務(wù)調(diào)度器的實現(xiàn)
本文主要介紹了C#?TaskScheduler任務(wù)調(diào)度器的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧<BR>2023-05-05c# for循環(huán)中創(chuàng)建線程執(zhí)行問題
這篇文章主要介紹了有關(guān)c# for循環(huán)中創(chuàng)建線程執(zhí)行問題,下面文章將將以舉例的方式展開for循環(huán)中創(chuàng)建線程執(zhí)行問題的內(nèi)容,需要的朋友可以參考一下,希望對你有所幫助2021-11-11C#將隱私信息(銀行賬戶,身份證號碼)中間部分特殊字符替換成*
大家在銀行交易某些業(yè)務(wù)時,都可以看到無論是身份證、銀行賬號中間部分都是用*號替換的,下面這篇文章主要介紹C#將隱私信息(銀行賬戶,身份證號碼)中間部分特殊字符替換成*的相關(guān)資料,需要的朋友可以參考下2015-08-08Extjs4如何處理后臺json數(shù)據(jù)中日期和時間
本文給大家分享Extjs4如何處理后臺json數(shù)據(jù)中日期和時間,通過代碼示例給大家剖析,感興趣的朋友快來圍觀2015-08-08