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 = ;
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
版权声明:本文为博主原创文章,转载请注明出处。http://www.cnblogs.com/SweetMemory/p/6378775.html
c# 应用NPOI 获取Excel中的图片,保存至本地的算法的更多相关文章
- 使用NPOI从Excel中提取图片及图片位置信息
问题背景: 话说,在ExcelReport的开发过程中,有一个比较棘手的问题:怎么复制图片呢? 当然,解决这个问题的第一步是:能使用NPOI提取到图片及图片的位置信息.到这里,一切想法都很顺利.但NP ...
- 使用Npoi向Excel中插入图片
先把数据库中的数据都导入到Excel表格中,把图片地址的路径全部转成绝对路径. 使用Npoi读取刚导出的Excle表格,把图片那个单元格的图片路径读出来,然后用文件流读取图片,然后通过Npoi把图片放 ...
- 获取Excel中的图片
如下图,上传要获取这里面的图片,而又不能直接选择,怎么办呢? 1.首先复制一份Excel文件命名copy.xlsx 2.修改copy.xlsx文件的后缀名变成copy.rar 3.解压copy.rar ...
- 将ImageView中的图片保存到本地相冊
private void SaveImageToSysAlbum() { if (FileUtil.isSdCardExist()) { BitmapDrawable bmpDrawable = (B ...
- 在 Excel 中设置图片
package com.smbea.demo.excel; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStr ...
- 利用POI获取Excel中图片和图片位置
利用POI获取Excel中图片和图片位置(支持excel2003or2007多sheet) 转自:http://blog.csdn.net/delongcpp/article/details/8833 ...
- java POI实现向Excel中插入图片
做Web开发免不了要与Excel打交道.今天老大给我一个任务-导出Excel.开始想的还是蛮简单的,无非就是查找,构建Excel,response下载即可.但是有一点不同,就是要加入图片, ...
- Python读取excel中的图片
作为Java程序员,Java自然是最主要的编程语言.但是Java适合完成大型项目,对于平时工作中小的工作任务,需要快速完成,易于修改和调试,使用Java显得很繁琐,需要进行类的设计,打成jar包,出现 ...
- java 在Excel中插入图片 POI实现
一.POI简介 Jakarta POI 是apache的子项目,目标是处理ole2对象.它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97- ...
随机推荐
- Linux如何正确关机
其实,在Linux领域内大多用在服务器上,很少遇到关机的操作.毕竟服务器上跑一个服务是永无止境的,除非特殊情况下,不得已才会关机. Linux和windows不同,在 Linux 底下,由于每个程序( ...
- URL与String转换
NSString *str = @"www.baidu.com"; NSURL *URL = [NSURL URLWithString:str]; //string>url ...
- Android开发之回调函数
写在前面,最近对回掉函数有了更深刻的认识,现在记录如下.由于在家看不到底层代码,在公司不能访问外网,现在只能凭靠记忆写这篇博文了,写错的地方还希望大神们指出来 其实给组件设置监听就是最典型的回掉函数的 ...
- Ubuntu下搭建C++开发环境
Ubuntu使用eclipse搭建c/c++编译环境----CDT插件 Ubuntu(Linux)使用Eclipse搭建C/C++编译环境 这两天,给自己电脑弄了双系统,除了原来的W ...
- arm-linux-gnueabi和arm-linux-gnueabihf 的区别
转载整理自:http://www.cnblogs.com/xiaotlili/p/3306100.html 一. 什么是ABI和EABI1 .ABI ABI(二进制应用程序接口-Application ...
- thinkphp所有参数配置
/* 项目设定 */ 'APP_DEBUG' => false, // 是否开启调试模式 'APP_DOMAIN_DEPLOY' => false, // 是否使用独立域名部署项目 'AP ...
- 14个华丽的javascript图表资源和插件
最近我分享一许多css/jquery 有用的资源,这里我将介绍一些用于构建华丽图表的javascript资源和插件,图表是展示数据最有效的方式. 建立一张图表有很多不同的方法,比如falsh.java ...
- Java中的 List Set Map
类层次关系如下: Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap └W ...
- *CCF 201612-2 工资计算(80)
试题编号:201612-2 试题名称:工资计算 时间限制:1.0s 内存限制:256.0MB 问题描述 小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所得税之后的工资.假设他一个月的税前工资 ...
- Struts2配置dtd约束
Struts2和Struts1的区别: 一.elclipse-ee开发 搭建环境eclipse-ee 1.加入jar包 apps/struts2-blank.war解压 2.在web.xml文件中配 ...