一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

c# 应用NPOI获取Excel中的图片,保存至本地的算法

时间:2017-03-24 编辑:简简单单 来源:一聚教程网

要求:读取excel中的图片,保存到指定路径

思路:  利用NPOI中 GetAllPictures()方法获取图片信息

步骤

1.新建一个Windows窗体应用程序

2.桌面新建一个excel,贴入两张图片

如下图:

3.在Form中拖入一个button

4.点击button,在点击事件方法中写入,要读取图片的方法:ExcelToImage

点击事件方法如下:

 代码如下 复制代码

privatestringexclePath =@"C:\users\lenovo\Desktop\testPic.xls";

 privatevoidbutton2_Click(objectsender, EventArgs e)

 {

 List listpath =newList{};

 stringsavePath = Path.Combine("E:\\","pic");

 if(!Directory.Exists(savePath))//判断是否存在保存文件夹,没有则新建

 Directory.CreateDirectory(savePath);

 boolresult = ExcelToImage(exclePath, savePath,reflistpath);

 if(result)

 MessageBox.Show("导出成功");

 else

 MessageBox.Show("导出失败");

 }

5.其中ExcelToImage方法事件如下:

 代码如下 复制代码

///

 /// 从excel获取图片

 ///

 /// 文件路径

 /// 图片保存路径

 /// 返回保存的图表地址list

 /// 保存图片是否成功

 privateboolExcelToImage(stringfilepath,stringsavepath,refList listPath)

 {

 try

 {

 using(FileStream fsReader = File.OpenRead(filepath))

 {

  HSSFWorkbook wk =newHSSFWorkbook(fsReader);

  IList pictures = wk.GetAllPictures();

  inti = 0;

  foreach(HSSFPictureData picinpictures)

  {

  //if (pic.Data.Length == 19504) //跳过不需要保存的图片,其中pic.data有图片长度

  // continue;

  stringext = pic.SuggestFileExtension();//获取扩展名

  stringpath =string.Empty;

  if(ext.Equals("jpg"))

  {

  Image jpg = Image.FromStream(newMemoryStream(pic.Data));//从pic.Data数据流创建图片

  path = Path.Combine(savepath,string.Format("pic{0}.jpg", i++));

  jpg.Save(path);//保存

  }

  elseif(ext.Equals("png"))

  {

  Image png = Image.FromStream(newMemoryStream(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)

 {

 returnfalse;

  

 }

 returntrue;

 }

结果:

注明:本算法  HSSFWorkbook 类,所以对应的excel应为2003以前(包括2003)的版本,扩展名是.xls。 

HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls

XSSFWorkbook:是操作Excel2007 +的版本,扩展名是.xlsx

热门栏目