npoi 使用方法
不少朋友在做项目的过程中或多或少的都会用到excel导入、导出功能,下面我来给大家介绍一下使用NPOI如何导入、导出excel,
通过代码描述一下npoi的使用方法,希望都够给需要的朋友一点点帮助,也能和大家一起学习一下npoi的使用方法,废话不多说,直接上代码
使用NPOI导出Excel代码如下
private static MemoryStream RenderToExcel(DataTable dt)
{
if (Equals(dt, null))
{
return null;
} MemoryStream ms = new MemoryStream();
using (dt)
{
IWorkbook workbook = new HSSFWorkbook();
ISheet sheet = workbook.CreateSheet();
IRow headerRow = sheet.CreateRow();
foreach (DataColumn column in dt.Columns)
{
headerRow.CreateCell(column.Ordinal).SetCellValue(column.Caption);
} int rowIndex = ;
foreach (DataRow row in dt.Rows)
{
IRow dataRow = sheet.CreateRow(rowIndex); foreach (DataColumn column in dt.Columns)
{
dataRow.CreateCell(column.Ordinal).SetCellValue(row[column.Caption].ToString());
}
rowIndex++;
} workbook.Write(ms);
ms.Flush();
ms.Position = ; } return ms;
}
private static void SaveToFile(MemoryStream ms, string dirPath, string fileName)
{
if (string.IsNullOrEmpty(dirPath) || string.IsNullOrEmpty(fileName))
{
return;
} if (!Directory.Exists(dirPath))
{
Directory.CreateDirectory(dirPath);
} using (FileStream fs = new FileStream(string.Format("{0}{1}", dirPath, fileName), FileMode.Create))
{
byte[] data = ms.ToArray();
fs.Write(data, , data.Length);
fs.Flush(); data = null;
}
}
public static void SaveExcel(DataTable dt, string dirPath, string fileName)
{
SaveToFile(RenderToExcel(dt), dirPath, fileName);
}
将Excel中的数据导入到DB中的方法如下
public static DataTable ReadExcelToDataTable(string fileName)
{
using (var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
{ var workbook = default(IWorkbook);
if (fileName.IndexOf(".xlsx", StringComparison.OrdinalIgnoreCase) > )
workbook = new XSSFWorkbook(stream);
else
workbook = new HSSFWorkbook(stream); var sheet = workbook.GetSheetAt(workbook.ActiveSheetIndex);
if (Equals(sheet, null))
{
return null;
} var dt = new DataTable();
CreateDataColumn(sheet, dt);
CreateDataTable(sheet, dt);
return dt;
}
}
private static void CreateDataTable(ISheet sheet, DataTable dt)
{
for (var i = ; i < sheet.LastRowNum; i++)
{
var sheetRow = sheet.GetRow(i);
var dataRow = dt.NewRow();
for (var j = ; j < sheetRow.LastCellNum; j++)
{
dataRow[j] = sheetRow.GetCell(j).ToString();
} dt.Rows.Add(dataRow);
}
}
private static void CreateDataColumn(ISheet sheet, DataTable dt)
{
var firstRow = sheet.GetRow();
for (var i = ; i < firstRow.LastCellNum; i++)
{
var column = new DataColumn(firstRow.GetCell(i).StringCellValue);
dt.Columns.Add(column);
}
}
说明:因为使用的是第三方的,需要引入dll文件
请到http://npoi.codeplex.com/releases/view/115353下载npoi,有源码,有编译好的dll文件。
如果只有导出到Excel的功能,下载好以后只需引入"NPOI.dll"
如果将excel中的数据导入到数据库中,并且需要同时兼容office 2003和office 2007的话,需要引入"NPOI.dll"、"NPOI.OOXML.dll"、"NPOI.OpenXml4net.dll"
如果仅仅需要兼容office 2003只需要引入"NPOI.dll"就可以了
office 2010下我没试过,有兴趣的朋友可以试一下,我所使用的编码环境是.net framework 4.0过低的版本我没试过,不知道以上代码能否正常执行
欢迎加入群:254082423
一起学习讨论asp.net mvc
npoi 使用方法的更多相关文章
- 记录NPOI使用方法
DLL 下载地址:https://files.cnblogs.com/files/xujunbao/NPOI.rar using NPOI.HSSF.UserModel; using NPOI.SS. ...
- Npoi Web 项目中(XSSFWorkbook) 导出出现无法访问已关闭的流的解决方法
原本在CS项目中用的好好的在BS项目中既然提示我导出出现无法访问已关闭的流的解决方法 比较郁闷经过研究 终于解决了先将方法发出来 让遇到此问题的筒子们以作参考 //新建类 重写Npoi流方法 publ ...
- NPOI组件集锦
关于NPOI不错的介绍:http://www.cnblogs.com/restran/p/3889479.html http://www.cnblogs.com/Irving/archive/2012 ...
- .NET Core 2.0 开源Office组件 NPOI
前言 去年 12 月,我移植了大家所熟知 NPOI 到 .NET Core 版本,这里是当时发的博客,当时得到了很多同学的支持,社区反应也很好,在这里非常感谢当时推荐的朋友们. 去年的那个版本是针对于 ...
- c# winform打印excel(使用NPOI+Spire.xls+PrintDocument直接打印excel)
前言 c#做winform程序要求生成并打印Excel报告,为了不安装Office相应组件,我选择了NPOI来生成Excel报告,用winform的PrintDocument控件来触发打印操作,而难点 ...
- NPOI 操作excel之 将图片插入到指定位置;
//新建类 重写Npoi流方法 public class NpoiMemoryStream : MemoryStream { public NpoiMemoryStream() { AllowClos ...
- .net利用NPOI生成excel文件
整理代码,这个是生成excel文件,用的是HSSF的方式,只能生成65535行,256列的数据,如果要看office07之后的生成,之前的随笔里提过.这个是一个完整的过程. 首先是已经查找好的数据,这 ...
- ASP.NET MVC 使用NPOI导出Excel 无法访问已关闭的流(转)
第一步重写MemoryStream , 让它不能自动关闭. //新建类 重写Npoi流方法 public class NpoiMemoryStream : MemoryStream { public ...
- 未能加载文件或程序集“NPOI”或它的某一个依赖项
自己遇到过得一个很麻瓜很耽误时间的bug,也请教了一些大神嫩是没找到解决方法 下面分享下问题和解决方法 做的是一个下载功能,本地是没问题IIS站点导出EXCEL的时候出错 我这边看不到错误信息,只能一 ...
随机推荐
- Linux中service命令和/etc/init.d/的关系
Linux中service命令和/etc/init.d/的关系 service xxx启动 /etc/init.d/ 目录下的xxx脚本 如一个脚本名为 mysvc保存在/etc/init.d/下 ...
- java 多线程使用方法及Socket的使用
public class newThread implements Runnable{ public void run(){ dosome(); } public void dosome(){ Sys ...
- Linux oracle 11g r2 安装前检查及安装
Linux环境配置 [c-sharp] view plaincopy OS:Fedora 15 DB:Oracle 11gR2 将Oracle安装到home/oracle_11目录 配置过程:本文来自 ...
- XMPP iOS开发(IM开发,转)
搭建完本地服务器之后,我们便可以着手客户端的工作,这里我们使用XMPPFramework这个开源库,安卓平台可以使用Smack(最好使用4.1以及之后的版本,支持流管理),为了简单起见这里只实现登陆. ...
- Select标签 依据value值默认选中 Jquery
网上找了非常多都是错的,不行的. 以下方法能够的 <script type="text/javascript"> $(document).ready(function( ...
- [原理][来源解析]spring于@Transactional,Propagation.SUPPORTS,以及 Hibernate Session,以及jdbc Connection关联
Spring 捆绑Hibernate. 夹: 一. 1. Spring 怎样处理propagation=Propagation.SUPPORTS? 2. Spring 何时生成HibernateSe ...
- JS 匿名函数 自执行
其实就是将函数直接做为表达调用,使用括号包裹定义函数体,解析器将会以函数表达式的方式去调用定义函数. 常见格式:(function() { /* code */ })(); 解释:包围函数(funct ...
- HBASE学习笔记--API
HBaseConfiguration HBaseConfiguration是每一个hbase client都会使用到的对象,它代表的是HBase配置信息.它有两种构造方式: public HBaseC ...
- mantis 中文统计报表乱码问题解决办法
mantis 中文报表乱码问题 1.安装mantisTB 1.2.17:a.安装插件:管理-->插件管理-->安装MantisGraph(Mantis图表 1.0) 插件b.修改配置文件: ...
- ##DAY3 自定义视图、视图控制器、视图控制器指定视图、loadView、 viewDidLoad、MVC、屏幕旋转、内存警告
##DAY3 自定义视图.视图控制器.视图控制器指定视图.loadView. viewDidLoad.MVC.屏幕旋转.内存警告 #pragma mark ———————自定义视图的步骤 —————— ...