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))//判斷是否存在保存文件夾,沒(méi)有則新建
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) //跳過(guò)不需要保存的圖片,其中pic.data有圖片長(zhǎng)度
// 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
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(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#通過(guò)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)文章
C#實(shí)現(xiàn)帶百分比的進(jìn)度條功能示例
這篇文章主要介紹了C#實(shí)現(xiàn)帶百分比的進(jìn)度條功能,分析了帶百分比進(jìn)度條的功能需求并結(jié)合實(shí)例形式給出了具體實(shí)現(xiàn)步驟與相關(guān)操作方法,需要的朋友可以參考下2017-05-05
C# Access數(shù)據(jù)庫(kù)增刪查改的簡(jiǎn)單方法
這篇文章主要介紹了C# Access數(shù)據(jù)庫(kù)增刪查改的簡(jiǎn)單方法,有需要的朋友可以參考一下2014-01-01
C# CAD SelectionFilter下TypedValue數(shù)組使用方式
這篇文章主要介紹了C# CAD SelectionFilter下TypedValue數(shù)組使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02
WPF調(diào)用ffmpeg實(shí)現(xiàn)屏幕錄制
這篇文章主要為大家詳細(xì)介紹了WPF如何調(diào)用ffmpeg實(shí)現(xiàn)屏幕錄制,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下2023-05-05
C#編程自學(xué)之?dāng)?shù)據(jù)類型和變量三
C#語(yǔ)言類型系統(tǒng)提出的一個(gè)核心概念裝箱(boxing)拆箱(unboxing)。裝箱和取消裝箱的概念是C#的類型系統(tǒng)的核心。它在“值類型”和“引用類型”之間的架起了一座橋梁,使得任何“值類型”的值都可以轉(zhuǎn)換為object類型的值,反過(guò)來(lái)轉(zhuǎn)換也可以。2015-10-10

