要求:讀取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數據流創建圖片 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
以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持VEVB武林網!
新聞熱點
疑難解答