不少朋友在做项目的过程中或多或少的都会用到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 使用方法的更多相关文章

  1. 记录NPOI使用方法

    DLL 下载地址:https://files.cnblogs.com/files/xujunbao/NPOI.rar using NPOI.HSSF.UserModel; using NPOI.SS. ...

  2. Npoi Web 项目中(XSSFWorkbook) 导出出现无法访问已关闭的流的解决方法

    原本在CS项目中用的好好的在BS项目中既然提示我导出出现无法访问已关闭的流的解决方法 比较郁闷经过研究 终于解决了先将方法发出来 让遇到此问题的筒子们以作参考 //新建类 重写Npoi流方法 publ ...

  3. NPOI组件集锦

    关于NPOI不错的介绍:http://www.cnblogs.com/restran/p/3889479.html http://www.cnblogs.com/Irving/archive/2012 ...

  4. .NET Core 2.0 开源Office组件 NPOI

    前言 去年 12 月,我移植了大家所熟知 NPOI 到 .NET Core 版本,这里是当时发的博客,当时得到了很多同学的支持,社区反应也很好,在这里非常感谢当时推荐的朋友们. 去年的那个版本是针对于 ...

  5. c# winform打印excel(使用NPOI+Spire.xls+PrintDocument直接打印excel)

    前言 c#做winform程序要求生成并打印Excel报告,为了不安装Office相应组件,我选择了NPOI来生成Excel报告,用winform的PrintDocument控件来触发打印操作,而难点 ...

  6. NPOI 操作excel之 将图片插入到指定位置;

    //新建类 重写Npoi流方法 public class NpoiMemoryStream : MemoryStream { public NpoiMemoryStream() { AllowClos ...

  7. .net利用NPOI生成excel文件

    整理代码,这个是生成excel文件,用的是HSSF的方式,只能生成65535行,256列的数据,如果要看office07之后的生成,之前的随笔里提过.这个是一个完整的过程. 首先是已经查找好的数据,这 ...

  8. ASP.NET MVC 使用NPOI导出Excel 无法访问已关闭的流(转)

    第一步重写MemoryStream , 让它不能自动关闭. //新建类 重写Npoi流方法 public class NpoiMemoryStream : MemoryStream { public ...

  9. 未能加载文件或程序集“NPOI”或它的某一个依赖项

    自己遇到过得一个很麻瓜很耽误时间的bug,也请教了一些大神嫩是没找到解决方法 下面分享下问题和解决方法 做的是一个下载功能,本地是没问题IIS站点导出EXCEL的时候出错 我这边看不到错误信息,只能一 ...

随机推荐

  1. Hibernate 、多表关联映射 - 一对一关系映射(one- to-one)

    hibernate.cfg.xml: <hibernate-configuration> <session-factory name="sessionFactory&quo ...

  2. jQuery插件

    1. Lightbox 2:    Lightbox 2 是一款很酷的图片显示插件,可以在一个平滑展开的新窗口中展现出图片,而同时页面的其余部分都变成黑色背景.使用这款插件,是为了当你的的图片过大必须 ...

  3. 在CGridView调用CJuiDialog的弹出层

    <?php $this->widget('zii.widgets.grid.CGridView', array(    'id'=>'user-grid',    'dataProv ...

  4. ActionBar隐藏修改图标和标题

    有时候在一些子页面或者内容页面,不需要显示ActionBar的标题栏图标.可用如下方式进行设置. 首先获取到ActionBar对象 ActionBar actionBar=getActionBar() ...

  5. 网页平面设计 HTML

    网页平面设计HTML基础 1.网页的基本元素:文字.图像.超链接 2.HTML的基本机构head.title.body三部分 <html> <head> <title&g ...

  6. Angular-UI-Router 学习笔记

    路由 Route 我在 慕课网 学习 AngularJS 为什么用 Route AJAX 请求不会留下 History 记录 用户无法直接通过 URL 进入应用中的指定页面(保存书签.链接分享给朋友) ...

  7. Ubuntu Android Studio 无法通过起动器开启

    问题: 1.可以通过终端开启 2.通过Android-Studio建立的Application无法启动, 提示 No JDK found. Please validate either STUDIO_ ...

  8. 使用关联对象(AssociatedObject)为UIButton添加Block响应

    在开发中,要给UIButton添加点击事件的话,通常的做法是这样的 UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem]; [ ...

  9. linux循环递归设置权限

    这里给出一个循环递归得到对文件夹和文件分别有效的设置方法: find /path -type f -exec chmod 644 {} \; #对目录和子目录里的文件 find /path -type ...

  10. iOS堆栈-内存-代码在据算机中的运行

    其实作程序不管是那行,学什么语言最终的目的是和就算机打交道的,我们写的程序计算机是怎么处理的呢??? 计算机运行我们的程序无非就是吧磁盘-内存-cpu三者结合起来 我们写一个程序代码肯定是在此盘中存着 ...