c# 應用NPOI獲取Excel中的圖片,保存至本地的算法
要求:讀取excel中的圖片,保存到指定路徑
思路: 利用NPOI中 GetAllPictures()方法獲取圖片信息
步驟:
1.新建一個Windows窗體應用程序
2.桌面新建一個excel,貼入兩張圖片
如下圖:

3.在Form中拖入一個button
4.點擊button,在點擊事件方法中寫入,要讀取圖片的方法:ExcelToImage
點擊事件方法如下:
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("導出成功");
else
MessageBox.Show("導出失敗");
}
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();//獲取擴展名
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;
}
結果:

注明:本算法 HSSFWorkbook 類,所以對應的excel應為2003以前(包括2003)的版本,擴展名是.xls。
HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,擴展名是.xls
XSSFWorkbook:是操作Excel2007 +的版本,擴展名是.xlsx
以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
相關文章
Unity3D UGUI實現(xiàn)縮放循環(huán)拖動卡牌展示效果
這篇文章主要為大家詳細介紹了Unity3D UGUI實現(xiàn)縮放循環(huán)拖動展示卡牌效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-02-02
C#使用Pipelines實現(xiàn)處理Socket數(shù)據(jù)包
這篇文章主要為大家詳細介紹了C#如何使用Pipelines實現(xiàn)處理Socket數(shù)據(jù)包,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2023-12-12
.Net WInform開發(fā)筆記(三)談談自制控件(自定義控件)
自定義控件的出現(xiàn)有利于用戶更好的實現(xiàn)自己的想法,可以封裝一些常用的方法,屬性等等,本文詳細介紹一下自定義控件的實現(xiàn),感興趣的朋友可以了解下2013-01-01
C#聯(lián)合VisionPro實現(xiàn)TCP/IP通信詳解
TCP/IP(傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議)是一組用于在網(wǎng)絡上進行通信的通信協(xié)議,本文主要為大家詳細介紹了C#如何聯(lián)合VisionPro實現(xiàn)TCP/IP通信,希望對大家有所幫助2024-02-02

