NPOI能够在用户没有安装office的情况下读写office文件,包括.xls/.doc/.ppt等类型的文件。本文介绍的是使用NPOI库内的函数读写Excel(.xls)内的内容。在使用NPOI之前首先先要将NPOI添加到工程应用中,NPOI的官网链接:https://archive.codeplex.com/?p=npoi,本文最后也附带了代码和文件。

一、将DataGridView控件内的数据写入Excel文件,如果Excel文件不存在则新建表格,如果文件存在则新建并替换该表格。

写如Excel前需要知道的:

  1. 引入命名空间;
  2. 创建文件流;
  3. 创建workbook;
  4. 创建sheet;
  5. 创建行row;
  6. 创建单元格cell;
  7. 修改单元格的值;

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的更多相关文章

  1. Java POI读取Excel数据,将数据写入到Excel表格

    1.准备 首先需要导入poi相应的jar包,包括: 下载地址:http://pan.baidu.com/s/1bpoxdz5 所需要的包的所在位置包括: 2.读取Excel数据代码 package S ...

  2. 将从数据库中获取的数据写入到Excel表中

    pom.xml文件写入代码,maven自动加载poi-3.1-beta2.jar <!-- https://mvnrepository.com/artifact/poi/poi --> & ...

  3. winform中DataGridView的数据实现导出excel

    1,窗体设计 首先需要引入程序集:Microsoft.Office.Interop.Excel  (如果没有引用过的需要右键添加引用再搜索就行了) 实现的方法: /// <summary> ...

  4. python实现查询的数据写入到excel

    #coding=utf-8import sysimport xlwtimport pymysql as MySQLdb #这里是python3 如果你是python2.x的话,import MySQL ...

  5. 数据写入到Excel,模板样式复杂

    先整理好Excel模板,如: 接下来在程序获取上面整理好的Excel模板并替换关键字就可以了public ActionResult SummaryStatistics() public ActionR ...

  6. Winform .NET 利用NPOI导出大数据量的Excel

    前言:公司让做一个导出数据到Excel的小工具,要求是用户前端输入sql语句,点击导出按钮之后,将数据导出到Excel,界面如图所示:文件下端显示导出的进度 遇到的问题: 1.使用NPOI进行Exce ...

  7. C#数据导出到Excel源代码

    最近工作中需要做一个把用户信息作为excel导出的功能,就顺便整理搜集了一些常用的导出文件的源代码,以供以后不时之需,也希望能给大家带来一些方便 一.DataSet数据集内数据转化为Excel // ...

  8. NPOI将DataGridView中的数据导出+导出Chart图表图片至Excel

    #region 导出Excel private HSSFWorkbook Workbook = null; private Sheet SheetOne = null; private DataFor ...

  9. C#使用NPOI读取电子表格Excel到DataGridView中

    上篇博文中已经介绍了如何写入Excel文件.这篇再介绍一下 如何从Excel中读取数据并保存到DataGridView中. 从Excel中读取数据并保存至DataGridView中,Excel文件第一 ...

随机推荐

  1. KVM虚拟化技术实战全过程

    今天准备开始.................... centos安装-kvm 教程: http://www.linuxidc.com/Linux/2017-01/140007.htm http:// ...

  2. 深入理解ByteBuffer(转)

    转:http://blog.csdn.net/workformywork/article/details/26699345?utm_source=tuicool&utm_medium=refe ...

  3. 第6条:在单次切片操作内,不要同时指定start、end和stride

    核心知识点: 1.使用负步进可以反转取值字符串及ASCII. 2.stride最好不要与start和end用在一起,会降低代码可读性. 除了基本的切片操作之外,python还提供了somelist[s ...

  4. 关于随机浏览头伪装fake-UserAgent

    使用: from fake_useragent import UserAgent ua = UserAgent() #ie浏览器的user agent print(ua.ie) Mozilla/5.0 ...

  5. IOS蓝牙开发模块

    一.引言 蓝牙是设备近距离通信的一种方便手段,在iPhone引入蓝牙4.0后,设备之间的通讯变得更加简单.相关的蓝牙操作由专门的 CoreBluetooth.framework进行统一管理.通过蓝牙进 ...

  6. FreeMarker使用后台枚举

    //页面使用枚举全路径访问 model.addAttribute("enums", BeansWrapper.getDefaultInstance().getEnumModels( ...

  7. Drools Expression 介绍

    用好Drools 中的表达式是你的规则引擎能否强大的必要条件 http://docs.jboss.org/drools/release/6.1.0.Final/drools-docs/html_sin ...

  8. Linux各个文件夹的主要作用 (源地址

    (源地址blog.csdn.net/lonelysky/article/details/5374230,侵删) linux下的文件结构,看看每个文件夹都是干吗用的 /bin 二进制可执行命令 /dev ...

  9. php 数组分页

    $p = max(1, I('param.p',1,'intval')); $count = count($date); $Page = new Page($count,15); $Page-> ...

  10. JavaWeb_常用功能_01_文件上传

    一个功能完善的JavaWeb应用,必不可少的一个功能就是文件的上传.无论是用户的头像等,还是用户需要上传的一系列资料,都是通过文件的上传功能实现的. 目前我们实现网站中关于文件的上传功能时,常用的是a ...