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. go语言之面向对象一

    在Go语言中, 你可以给任意类型(包括内置类型,但不包括指针类型)添加相应的办法.示例如下: type Integer int func (a Integer) Less(b Integer) boo ...

  2. Docker dubbo 服务注册

    vim run.sh #!/bin/baship=`ifconfig eth0 |grep "inet"|awk '{print $2}'`hn=dubbo-service-pro ...

  3. PHP中ob系列函数讲解(浏览器缓存技术) (转)

    Output Control 函数可以让你自由控制脚本中数据的输出.它非常地有用,特别是对于:当你想在数据已经输出后,再输出文件头的情况. 输出控制函数不对使用 header() 或 setcooki ...

  4. ExtASPNet web.config

    [转CSDN]:http://download.csdn.net/download/mcqq123321/4607708 修改 Web.config 打开 web.config,在 configura ...

  5. 深度问答之提取语料,导入了yml模块

    根据目录下的yml文件循环创建同名文件夹,并从yml文件读取问答并给每个文件夹写入question和answer文件 #!/usr/bin/env python # coding:utf8 # aut ...

  6. Python lambda 匿名函数

    lambda [arg1[, arg2, ... argN]]: expression Python使用lambda关键字创造匿名函数.所谓匿名,意即不再使用def语句这样标准的形式定义一个函数.这种 ...

  7. hihocoder 1142 三分求极值【三分算法 模板应用】

    #1142 : 三分·三分求极值 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 这一次我们就简单一点了,题目在此: 在直角坐标系中有一条抛物线y=ax^2+bx+c和一 ...

  8. NGINX中遇到SELinux 13:permission denied

    被selinux坑了.抓包发现端口始终没有流量, 操作过程中还特地dmesg看了c并没发现selinux的异常. https://www.nginx.com/blog/using-nginx-plus ...

  9. Thriftpy一个简单的例子

    sleep.thrift文件(什么是thrift文件?),文件内容如下,该文件定义了一个Sleep服务,该服务提供一个sleep方法,sleep方法接受一个32位int类型的参数且没有返回值 serv ...

  10. node.js定时任务:node-schedule的使用

    安装 npm install node-schedule 使用方法 1:确定时间 例如:2014年2月14日,15:40执行 var schedule = require("node-sch ...