C#使用NPOI将DataGridView内数据写入电子表格Excel
NPOI能够在用户没有安装office的情况下读写office文件,包括.xls/.doc/.ppt等类型的文件。本文介绍的是使用NPOI库内的函数读写Excel(.xls)内的内容。在使用NPOI之前首先先要将NPOI添加到工程应用中,NPOI的官网链接:https://archive.codeplex.com/?p=npoi,本文最后也附带了代码和文件。
一、将DataGridView控件内的数据写入Excel文件,如果Excel文件不存在则新建表格,如果文件存在则新建并替换该表格。
写如Excel前需要知道的:
- 引入命名空间;
 - 创建文件流;
 - 创建workbook;
 - 创建sheet;
 - 创建行row;
 - 创建单元格cell;
 - 修改单元格的值;
 
1.引入命名空间:
本文操作所用到的NPOI中命名空间有:
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
2.创建文件流:
使用FileStream创建文件流FileStream fs = new FileStream(文件路径, 文件操作方式, 文件读写权限);
FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write);
3.创建workbook:
创建workbook只要创建一个HSSFWorkbook实例就可以了,HSSFWorkbook是NPOI.HSSF.UserModel中的类。NPOI.HSSF.UserModel.HSSFWorkbook这个类便是用来创建.xls文件的。
HSSFWorkbook workbook = new HSSFWorkbook();
4.创建sheet:
创建完workbook后,还需要为其添加工作表,即创建sheet。创建sheet同样是创建ISheet实例便可以了,ISheet是NPOI.SS.UserModel中用来创建工作表的类。
ISheet sheet = workbook.CreateSheet("Sheet1");
5.创建行row:
创建行的方法与上述类似,即创建IRow实例。
IRow row = sheet.CreateRow(i);//i为行序号
6.创建单元格cell:
同样的创建单元格就是创建ICell实例。
ICell cell = row.CreateCell(j);//j为列序号
7.修改单元格值:
修改单元格值通过调用cell的方法SetCellValue()即可;
放个例子:
 //------------【函数:将表格控件保存至Excel文件(新建/替换)】------------    
         //filePath要保存的目标Excel文件路径名
         //datagGridView要保存至Excel的表格控件
         //------------------------------------------------------------------------
         public static bool SaveToExcelNew(string filePath,DataGridView dataGridView)
         {
             bool result = true;
             FileStream fs = null;//创建一个新的文件流
             HSSFWorkbook workbook = null;//创建一个新的Excel文件
             ISheet sheet = null;//为Excel创建一张工作表
             //定义行数、列数、与当前Excel已有行数
             int rowCount = dataGridView.RowCount;//记录表格中的行数
             int colCount = dataGridView.ColumnCount;//记录表格中的列数
             //为了防止出错,这里应该判定一下文件与文件是否存在
             //创建工作表
             try
             {
                 fs = new FileStream(filePath, FileMode.Create, FileAccess.Write);
                 workbook = new HSSFWorkbook();
                 sheet = workbook.CreateSheet("Sheet1");
                 IRow row = sheet.CreateRow();
                 for (int j = ; j < colCount; j++)  //列循环
                 {
                     if (dataGridView.Columns[j].Visible && dataGridView.Rows[].Cells[j].Value != null)
                     {
                         ICell cell = row.CreateCell(j);//创建列
                         cell.SetCellValue(dataGridView.Columns[j].HeaderText.ToString());//更改单元格值
                     }
                 }
             }
             catch
             {
                 result = false;
                 return result;
             }
             for (int i = ; i < rowCount; i++)      //行循环
             {
                 //防止行数超过Excel限制
                 if (i >= )
                 {
                     result = false;
                     break;
                 }
                 IRow row = sheet.CreateRow( + i);  //创建行
                 for (int j = ; j < colCount; j++)  //列循环
                 {
                     if (dataGridView.Columns[j].Visible && dataGridView.Rows[i].Cells[j].Value != null)
                     {
                         ICell cell = row.CreateCell(j);//创建列
                         cell.SetCellValue(dataGridView.Rows[i].Cells[j].Value.ToString());//更改单元格值
                     }
                 }
             }
             try
             {
                 workbook.Write(fs);
             }
             catch
             {
                 result = false;
                 return result;
             }
             finally
             {
                 if (fs != null)
                 {
                     fs.Close();
                     fs.Dispose();
                 }
                 workbook = null;
             }
             return result;
         }
二、将DataGridView控件内的数据写入Excel文件,如果Excel文件不存在则新建表格,如果文件存在则将数据添加至表格末尾。
思路与上文例子相同,只是在写入电子表格时使用ISheet的LastRowNum属性获取Excel的最后一行,将新的数据一次向下存放。
放个例子:
//------------【函数:将表格控件保存至Excel文件(添加/新建)】------------
//filePath要保存的目标Excel文件路径名
//datagGridView要保存至Excel的表格控件
//------------------------------------------------
public static bool SaveToExcelAdd(string filePath, DataGridView dataGridView)
{
bool result = true; FileStream fs = null;//创建一个新的文件流
HSSFWorkbook workbook = null;//创建一个新的Excel文件
ISheet sheet = null;//为Excel创建一张工作表 //定义行数、列数、与当前Excel已有行数
int rowCount = dataGridView.RowCount;//记录表格中的行数
int colCount = dataGridView.ColumnCount;//记录表格中的列数
int numCount = ;//Excell最后一行序号 //为了防止出错这里应该判断文件夹是否存在 //判断文件是否存在
if (!File.Exists(filePath))
{
try
{
fs = new FileStream(filePath, FileMode.Create, FileAccess.Write);
workbook = new HSSFWorkbook();
sheet = workbook.CreateSheet("Sheet1");
IRow row = sheet.CreateRow();
for (int j = ; j < colCount; j++) //列循环
{
if (dataGridView.Columns[j].Visible && dataGridView.Rows[].Cells[j].Value != null)
{
ICell cell = row.CreateCell(j);//创建列
cell.SetCellValue(dataGridView.Columns[j].HeaderText.ToString());//更改单元格值
}
}
workbook.Write(fs);
}
catch
{
result = false;
return result;
}
finally
{
if (fs != null)
{
fs.Close();
fs.Dispose();
fs = null;
}
workbook = null;
}
}
//创建指向文件的工作表
try
{
fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
workbook = new HSSFWorkbook(fs);//.xls
sheet = workbook.GetSheetAt();
if (sheet == null)
{
result = false;
return result;
}
numCount = sheet.LastRowNum + ;
}
catch
{
result = false;
return result;
} for (int i = ; i < rowCount; i++) //行循环
{
//防止行数超过Excel限制
if (numCount + i >= )
{
result = false;
break;
}
IRow row = sheet.CreateRow(numCount + i); //创建行
for (int j = ; j < colCount; j++) //列循环
{
if (dataGridView.Columns[j].Visible && dataGridView.Rows[i].Cells[j].Value != null)
{
ICell cell = row.CreateCell(j);//创建列
cell.SetCellValue(dataGridView.Rows[i].Cells[j].Value.ToString());//更改单元格值
}
}
}
try
{
fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
workbook.Write(fs);
}
catch
{
result = false;
return result;
}
finally
{
if (fs != null)
{
fs.Close();
fs.Dispose();
fs = null;
}
workbook = null;
}
return result;
}
本文所说的只是单纯的实现写入电子表格的功能,关于NPOI更加详细的说明可以参考NPOI手册,或者博客,这个给一个连接:http://blog.csdn.net/pan_junbiao/article/details/39717443
如何将Excel内数据读取到DataGridView中,参考下篇博文:http://blog.csdn.net/nicewe/article/details/79621698
本文的源文件程序(Visual Studio 2017)与NPOI.DLL文件下载地址:https://download.csdn.net/download/nicewe/10296960
C#使用NPOI将DataGridView内数据写入电子表格Excel的更多相关文章
- Java POI读取Excel数据,将数据写入到Excel表格
		
1.准备 首先需要导入poi相应的jar包,包括: 下载地址:http://pan.baidu.com/s/1bpoxdz5 所需要的包的所在位置包括: 2.读取Excel数据代码 package S ...
 - 将从数据库中获取的数据写入到Excel表中
		
pom.xml文件写入代码,maven自动加载poi-3.1-beta2.jar <!-- https://mvnrepository.com/artifact/poi/poi --> & ...
 - winform中DataGridView的数据实现导出excel
		
1,窗体设计 首先需要引入程序集:Microsoft.Office.Interop.Excel (如果没有引用过的需要右键添加引用再搜索就行了) 实现的方法: /// <summary> ...
 - python实现查询的数据写入到excel
		
#coding=utf-8import sysimport xlwtimport pymysql as MySQLdb #这里是python3 如果你是python2.x的话,import MySQL ...
 - 数据写入到Excel,模板样式复杂
		
先整理好Excel模板,如: 接下来在程序获取上面整理好的Excel模板并替换关键字就可以了public ActionResult SummaryStatistics() public ActionR ...
 - Winform .NET 利用NPOI导出大数据量的Excel
		
前言:公司让做一个导出数据到Excel的小工具,要求是用户前端输入sql语句,点击导出按钮之后,将数据导出到Excel,界面如图所示:文件下端显示导出的进度 遇到的问题: 1.使用NPOI进行Exce ...
 - C#数据导出到Excel源代码
		
最近工作中需要做一个把用户信息作为excel导出的功能,就顺便整理搜集了一些常用的导出文件的源代码,以供以后不时之需,也希望能给大家带来一些方便 一.DataSet数据集内数据转化为Excel // ...
 - NPOI将DataGridView中的数据导出+导出Chart图表图片至Excel
		
#region 导出Excel private HSSFWorkbook Workbook = null; private Sheet SheetOne = null; private DataFor ...
 - C#使用NPOI读取电子表格Excel到DataGridView中
		
上篇博文中已经介绍了如何写入Excel文件.这篇再介绍一下 如何从Excel中读取数据并保存到DataGridView中. 从Excel中读取数据并保存至DataGridView中,Excel文件第一 ...
 
随机推荐
- Activiti使用过程_1
			
1 微信公众号:
 - ip地址设备信息
			
其实是个小问题,在项目中遇到要获取手机ip地址和mac地址的问题,mac地址获取用appcan的uexDevice插件可以实现. 但是ip地址,获取的方式很多,具体有搜狐/腾讯/新浪等提供的接口.但是 ...
 - 微信小程序高度设置为100%
			
在网页中设置body,html{height:100%}; 将body和html设置为100%,这样我们就可以在他们的子元素中使用height:100%来使的我们的容器元素占满屏幕的高度啦. 但是在微 ...
 - JS实现下拉列表的二级联动
			
这个是简单也是最基本的下拉框联动的示例,这个示例主要针对那些只有二级联动,且第一级是固定的选项,第二级的内容也比较简单,不刷新的联动,动态的联动需要检索数据库,这个对不需要更新的二级联动比较实用.这里 ...
 - flex TweenLite
			
本贴已在 AS天地会转发,大家可以参考:http://bbs.actionscript3.cn/viewthread.php?tid=11090&pid=91142&page=1&am ...
 - js琐碎知识点
			
1.javascript发展史 javascript首先由Netscape设计,为改善浏览器用户体验,名为liveScript, 网景公司被sun公司收购,为了宣传改名为javascript 后来su ...
 - 详谈 MySQL Online DDL
			
作为一名DBA,对数据库进行DDL操作非常多,如添加索引,添加字段等等.对于MySQL数据库,DDL支持的并不是很好,一不留心就导致了全表被锁,经常搞得刚入门小伙伴很郁闷又无辜,不是说MySQL支持O ...
 - P3506 [POI2010]MOT-Monotonicity 2
			
题目 P3506 [POI2010]MOT-Monotonicity 2 第一次切掉没题解的题\(qwq\) 做法 首先确定\(a_i\)的位置后显然就能确定\(a_{i+1}\)的位置,建一棵权值线 ...
 - C++ Const 使用总结,代码实例亲测
			
1. 修饰普通变量 修饰变量语法 const TYPE value <==> TYPE const value 两者等价, 变量不可修改,无需说明. 2. 修饰指针 首先看下面一段 代码 ...
 - XP最高支持IE8
			
1.https://www.microsoft.com/zh-CN/download/details.aspx?id=24488 适用于 Windows XP 的 Internet Explorer ...