测量小百科 | 使用NPOI操作Excel
来源: | 作者:JYTEK | 发布时间: 2022-07-27 | 445 次浏览 | 分享到:

关键词:NPOI、Excel、开源、NuGet


导读

我们在开发中经常用到导入导出表格、文档的情况,如果是使用.NET,需要在服务器端装Office,且及时更新它,以防 漏洞,还需要设定权限允许.NET访问COM+,如果在导出过程中出问题可能导致服务器宕机。

NPOI是目前比较流行的一款操作Excel的组件。移植于Java的POI,是一个开源项目,对Excel的操作很全面。相对于直接使用.NET,NPOI的优势在于:

1. 免费。
2. 机器不用安装Office也可以直接操作Excel,免去很多麻烦。
3. 支持的文件格式包括Excel 2003和2007之后的xls与xlsx。
4. 支持文件的导入和导出。
5. 网上有丰富的实例代码,遇到基本的问题可以上网参考网友的解决方法。
6. NPOI能支持绝大多数Excel里面的功能操作(Excel内的公式函数、设置单元格的格式样式)。
7. 导入导出速度快。
8. 支持读取超过256列的Excel表格。


本期小百科介绍如何在C#编程时使用NPOI创建及读写Excel文件。


NPOI安装

在Visual Studio中,可以通过NuGet下载安装NPOI插件。

在解决方案资源管理器中右击项目名称,找到管理NuGet程序包,即可进入NuGet管理器。

点击浏览,在搜索框中搜索NPOI,找到图中标明的NPOI插件点击,右侧出现安装界面,点击安装即可。也可以直接点击NPOI名称右侧的黑色箭头进行安装。

图 1 安装NPOI


安装后,可以在解决方案资源管理器中看到NPOI的相关动态库的引用。

图 2 NPOI 项目引用


NPOI创建Excel

创建Excel分为4步:

1. 创建Excel新实例
2. 添加sheet,行,以及单元格
3. 为cell赋值
4. 保存Excel文件


首先在代码顶端添加using:

using NPOI.XSSF.UserModel;

using NPOI.SS.UserModel;

using System.IO;


基本操作代码如下所示:

//创建一个数组

double[] data = new double[10] {-10,-5,-2.35, 0,0.001,1,1.5,5,10,1000};

//创建Excel文件,xlsx格式使用XSSFWorkbook实例,xls使用HSSFWorkbook实例

IWorkbook workbook = new XSSFWorkbook();

//添加sheet

ISheet sheet1 = workbook.CreateSheet("sheet1");

for (int i = 0; i < data.Length; i++)

{

    IRow row = sheet1.CreateRow(i);//给sheet1添加行,索引从0开始

    ICell cell = row.CreateCell(0);//给每一行添加单元格

    cell.SetCellValue(data[i]);//给单元格赋值

}

//创建流文件

FileStream file = new FileStream

    (@"C:UsersjytekDesktopNPOINPOI Excel.xlsx", FileMode.Create);

workbook.Write(file);//写入文件


运行程序后,在对应的保存路径中得到Excel表格。

图 3 创建的Excel表格


结果如下:

图 4 生成的Excel表格


NPOI读写Excel

读取已存在的Excel的数据

对已存在的Excel进行读取只需2步:

1. 根据要读取的Excel路径创建Excel新实例
2. 根据要读取的单元格的位置读取数据

具体代码如下:

//创建流文件

FileStream fs = new FileStream

    (@"C:UsersjytekDesktopNPOINPOI Excel.xlsx", FileMode.OpenOrCreate, FileAccess.ReadWrite);

//创建Excel实例

IWorkbook workbookRead = new XSSFWorkbook(fs);

 

//读取sheet1的第一行第一个Cell的数据

Double readData =

    workbookRead.GetSheet("sheet1").GetRow(0).GetCell(0).NumericCellValue;

Console.WriteLine(readData);

Console.ReadKey();


运行程序,读取到对应的数据。

图 5 运行读取excel数据程序界面


对已存在的Excel写入数据

对已存在的Excel写入数据需要4步:

1. 根据要读取的Excel路径创建Excel新实例
2. 创建要写入的数据的单元格
3. 在单元格中写入数据
4. 保存Excel文件


具体代码如下:

//创建流文件

FileStream fs = new FileStream

    (@"C:UsersjytekDesktopNPOINPOI Excel.xlsx", FileMode.OpenOrCreate, FileAccess.ReadWrite);

//创建Excel实例

IWorkbook workbookWrite = new XSSFWorkbook(fs);

//在sheet1中添加新的行和Cell

ICell cellToWrite = workbookWrite.GetSheet("sheet1").CreateRow(10).CreateCell(0);

//给单元格赋值为数组总和

cellToWrite.SetCellValue(data.Sum());          

//写入文件,这里要重新创建流文件

fs = new FileStream

    (@"C:UsersjytekDesktopNPOINPOI Excel.xlsx", FileMode.OpenOrCreate, FileAccess.ReadWrite);

workbookWrite.Write(fs);


打开Excel文件,即可看到新写入的数据。

图 6 写入数据后的Excel