c# 應(yīng)用NPOI獲取Excel中的圖片,保存至本地的算法
要求:讀取excel中的圖片,保存到指定路徑
思路: 利用NPOI中 GetAllPictures()方法獲取圖片信息
步驟:
1.新建一個(gè)Windows窗體應(yīng)用程序
2.桌面新建一個(gè)excel,貼入兩張圖片
如下圖:
3.在Form中拖入一個(gè)button
4.點(diǎn)擊button,在點(diǎn)擊事件方法中寫入,要讀取圖片的方法:ExcelToImage
點(diǎn)擊事件方法如下:
private string exclePath = @"C:\users\lenovo\Desktop\testPic.xls"; private void button2_Click(object sender, EventArgs e) { List<string> listpath = new List<string>{}; string savePath = Path.Combine("E:\\","pic"); if(!Directory.Exists(savePath))//判斷是否存在保存文件夾,沒有則新建 Directory.CreateDirectory(savePath); bool result = ExcelToImage(exclePath, savePath, ref listpath); if(result) MessageBox.Show("導(dǎo)出成功"); else MessageBox.Show("導(dǎo)出失敗"); }
5.其中ExcelToImage方法事件如下:
/// <summary> /// 從excel獲取圖片 /// </summary> /// <param name="filepath">文件路徑</param> /// <param name="savepath">圖片保存路徑</param> /// <param name="listPath">返回保存的圖表地址list</param> /// <returns>保存圖片是否成功</returns> private bool ExcelToImage(string filepath,string savepath,ref List<string> listPath) { try { using (FileStream fsReader = File.OpenRead(filepath)) { HSSFWorkbook wk = new HSSFWorkbook(fsReader); IList pictures = wk.GetAllPictures(); int i = 0; foreach (HSSFPictureData pic in pictures) { //if (pic.Data.Length == 19504) //跳過不需要保存的圖片,其中pic.data有圖片長度 // continue; string ext = pic.SuggestFileExtension();//獲取擴(kuò)展名 string path = string.Empty; if (ext.Equals("jpg")) { Image jpg = Image.FromStream(new MemoryStream(pic.Data));//從pic.Data數(shù)據(jù)流創(chuàng)建圖片 path = Path.Combine(savepath, string.Format("pic{0}.jpg", i++)); jpg.Save(path);//保存 } else if (ext.Equals("png")) { Image png = Image.FromStream(new MemoryStream(pic.Data)); path = Path.Combine(savepath, string.Format("pic{0}.png", i++)); png.Save(path); } if (!string.IsNullOrEmpty(path)) listPath.Add(path); } } } catch (Exception ex) { return false; } return true; }
結(jié)果:
注明:本算法 HSSFWorkbook 類,所以對(duì)應(yīng)的excel應(yīng)為2003以前(包括2003)的版本,擴(kuò)展名是.xls。
HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,擴(kuò)展名是.xls
XSSFWorkbook:是操作Excel2007 +的版本,擴(kuò)展名是.xlsx
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!
- C#實(shí)現(xiàn)DataSet內(nèi)數(shù)據(jù)轉(zhuǎn)化為Excel和Word文件的通用類完整實(shí)例
- C#將Excel中的數(shù)據(jù)轉(zhuǎn)換成DataSet
- C#使用NPOI導(dǎo)入Excel的方法詳解
- C#基于NPOI生成具有精確列寬行高的Excel文件的方法
- C#通過NPOI操作Excel的實(shí)例代碼
- c# 根據(jù)NPOI 讀取一個(gè)excel 文件的多個(gè)Sheet
- C#使用NPOI上傳excel
- C# 基于NPOI操作Excel
- C#實(shí)現(xiàn)NPOI的Excel導(dǎo)出詳解
- C#使用NPOI讀取excel轉(zhuǎn)為DataSet
相關(guān)文章
Unity3D UGUI實(shí)現(xiàn)縮放循環(huán)拖動(dòng)卡牌展示效果
這篇文章主要為大家詳細(xì)介紹了Unity3D UGUI實(shí)現(xiàn)縮放循環(huán)拖動(dòng)展示卡牌效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02C#使用Pipelines實(shí)現(xiàn)處理Socket數(shù)據(jù)包
這篇文章主要為大家詳細(xì)介紹了C#如何使用Pipelines實(shí)現(xiàn)處理Socket數(shù)據(jù)包,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12C#使用UdpClient類進(jìn)行簡單通信的實(shí)例
本文主要介紹了C#使用UdpClient類進(jìn)行簡單通信的實(shí)例,具有很好的參考價(jià)值,需要的朋友可以看下2016-12-12.Net WInform開發(fā)筆記(三)談?wù)勛灾瓶丶?自定義控件)
自定義控件的出現(xiàn)有利于用戶更好的實(shí)現(xiàn)自己的想法,可以封裝一些常用的方法,屬性等等,本文詳細(xì)介紹一下自定義控件的實(shí)現(xiàn),感興趣的朋友可以了解下2013-01-01深入Resource實(shí)現(xiàn)多語言支持的應(yīng)用詳解
本篇文章是對(duì)Resource實(shí)現(xiàn)多語言支持的應(yīng)用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C#聯(lián)合VisionPro實(shí)現(xiàn)TCP/IP通信詳解
TCP/IP(傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議)是一組用于在網(wǎng)絡(luò)上進(jìn)行通信的通信協(xié)議,本文主要為大家詳細(xì)介紹了C#如何聯(lián)合VisionPro實(shí)現(xiàn)TCP/IP通信,希望對(duì)大家有所幫助2024-02-02