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的时候出错 我这边看不到错误信息,只能一 ...
随机推荐
- CentOs文件实时同步
1,生成数据序
- poj - 1228 - Grandpa's Estate
题意:原来一个凸多边形删去一些点后剩n个点,问这个n个点能否确定原来的凸包(1 <= 测试组数t <= 10,1 <= n <= 1000). 题目链接:http://poj. ...
- Tab Bar Controller和Navigation Controller混合使用详细教程
在IPHONE上,NAV和TAB混合使用的案例很多.但很多书籍都没详细介绍这个是怎么使用的.我也找了很久才弄清楚怎么做.现在分享给大家. 1.先建立一个Window-based Application ...
- CSS权威指南学习笔记 —— HTML元素分类
HTML文档由各种元素组成.比如,p.table.span等等.每个元素都会对文档的表现有所影响.CSS中,每个元素都会生成一个框(传说中的盒子),其中包含元素内容. 元素可以根据它的创建方式分为两种 ...
- C#核编之System.Environment类
在前面的例子中用来了Environment.GetCommandLineArgs()这个方法,这个方法就是获取用户的命令行输入,是Environment类的方法之一,该方法的返回值是string[] ...
- php缓存生成及更新实现参考哦
<?php //如果在find/findAll里传入了参数,则该参数即为key ORM::factory('article')->where('user_id', '=', '2')-&g ...
- javascript实现倒计时
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- EC读书笔记系列之11:条款20、21
条款20 宁以pass-by-reference-to-const替换pass-by-value 记住: ★尽量以pass-by-reference-to-const替换pass-by-value.前 ...
- 状态压缩DP------学习小记
状态DP主要用的还是DP思想,顾名思义,加了一个状态,主要是用来求状态个数的. 状态是用二进制数来表示的,也就是用0或1来表示,每一行有一个状态数,就是由这一行的0或1组成的,首先我们要获得每行的状态 ...
- 用CodeBlocks构建C项目时候出现的问题
后缀名为depend的文件 是makefile 编译产生的文件 是生成一种依赖关系 帮助程序编译的 那为什么有时候会生成而有时候又不会呢? 看你makefile 自己的编写 写了就有 没写就没 ...