Home  >  Article  >  Backend Development  >  c# Detailed introduction of the algorithm for applying NPOI to obtain pictures in Excel and save them locally

c# Detailed introduction of the algorithm for applying NPOI to obtain pictures in Excel and save them locally

黄舟
黄舟Original
2017-03-07 10:49:013039browse

本文主要介绍了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数据流创建图片
  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

 以上就是c# 应用NPOI获取Excel中的图片,保存至本地的算法的详细介绍的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn