博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NpoI
阅读量:5310 次
发布时间:2019-06-14

本文共 3212 字,大约阅读时间需要 10 分钟。

NPoI用于Excel表的导出,导入,

使用NPoI需要引入dll文件,Npoi.dll和lonic.zip.dll.对于开发者主要使用Npoi.Hssf.userModel空间下的,HSSfWorkbook,HSSfSheet,HSSfRow,HSSfCell,对应的借口在Npoi.ss.UserModel空间下的, iworkbook,iSheet,IRow,ICell,分别对应Excel文件,工作薄,行,列。

 

简单演示一下创建一个Workbook对象,添加一个工作表,在工作表中添加一行一列:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
using
NPOI.HSSF.UserModel;
using
NPOI.SS.UserModel;
  
public
class
NPOIWrite
{
    
void
CreateSheet()
    
{
        
IWorkbook workbook =
new
HSSFWorkbook();
//创建Workbook对象
        
ISheet sheet = workbook.CreateSheet(
"Sheet1"
);
//创建工作表
        
IRow row = sheet.CreateRow(0);
//在工作表中添加一行
        
ICell cell = row.CreateCell(0);
//在行中添加一列
        
cell.SetCellValue(
"test"
);
//设置列的内容
    
}
}

相应的读取代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using
System.IO;
using
NPOI.HSSF.UserModel;
using
NPOI.SS.UserModel;
  
public
class
NPOIRead
{
    
void
GetSheet(Stream stream)
    
{
        
IWorkbook workbook =
new
HSSFWorkbook(stream);
//从流内容创建Workbook对象
        
ISheet sheet = workbook.GetSheetAt(0);
//获取第一个工作表
        
IRow row = sheet.GetRow(0);
//获取工作表第一行
        
ICell cell = row.GetCell(0);
//获取行的第一列
        
string
value = cell.ToString();
//获取列的值
    
}
}

使用NPOI导出

从DataTable读取内容来创建Workbook对象:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public
static
MemoryStream RenderToExcel(DataTable table)
{
    
MemoryStream ms =
new
MemoryStream();
 
    
using
(table)
    
{
        
using
(IWorkbook workbook =
new
HSSFWorkbook())
        
{
            
using
(ISheet sheet = workbook.CreateSheet())
            
{
                
IRow headerRow = sheet.CreateRow(0);
 
                
// handling header.
                
foreach
(DataColumn column
in
table.Columns)
                    
headerRow.CreateCell(column.Ordinal).SetCellValue(column.Caption);
//If Caption not set, returns the ColumnName value
 
                
// handling value.
                
int
rowIndex = 1;
 
                
foreach
(DataRow row
in
table.Rows)
                
{
                    
IRow dataRow = sheet.CreateRow(rowIndex);
 
                    
foreach
(DataColumn column
in
table.Columns)
                    
{
                        
dataRow.CreateCell(column.Ordinal).SetCellValue(row[column].ToString());
                    
}
 
                    
rowIndex++;
                
}
 
                
workbook.Write(ms);
                
ms.Flush();
                
ms.Position = 0;
            
}
        
}
    
}
    
return
ms;
}
 

使用NPOI导入

需要注意的是,sheet.LastRowNum = sheet.PhysicalNumberOfRows - 1,这里可能存在BUG:当没有数据或只有一行数据时sheet.LastRowNum为0,PhysicalNumberOfRows 表现正常

这里读取流中的Excel来创建Workbook对象,并转换成DataTable:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
static
DataTable RenderFromExcel(Stream excelFileStream)
{
    
using
(excelFileStream)
    
{
        
using
(IWorkbook workbook =
new
HSSFWorkbook(excelFileStream))
        
{
            
using
(ISheet sheet = workbook.GetSheetAt(0))
//取第一个表
            
{
                
DataTable table =
new
DataTable();
 
                
IRow headerRow = sheet.GetRow(0);
//第一行为标题行
                
int
cellCount = headerRow.LastCellNum;
//LastCellNum = PhysicalNumberOfCells
                
int
rowCount = sheet.LastRowNum;
//LastRowNum = PhysicalNumberOfRows - 1
 
                
//handling header.
                
for
(
int
i = headerRow.FirstCellNum; i < cellCount; i++)
                
{
                    
DataColumn column =
new
DataColumn(headerRow.GetCell(i).StringCellValue);
                    
table.Columns.Add(column);
                
}
 
                
for
(
int
i = (sheet.FirstRowNum + 1); i <= rowCount; i++)
                
{
                    
IRow row = sheet.GetRow(i);
                    
DataRow dataRow = table.NewRow();
 
                    
if
(row !=
null
)
                    
{
                        
for
(
int
j = row.FirstCellNum; j < cellCount; j++)
                        
{
                            
if
(row.GetCell(j) !=
null
)
                                
dataRow[j] = GetCellValue(row.GetCell(j));
                        
}
                    
}
 
                    
table.Rows.Add(dataRow);
                
}
                
return
table;
 
            
}
        
}
    
}
}

转载于:https://www.cnblogs.com/chm74/p/3642646.html

你可能感兴趣的文章
自建数据源(RSO2)、及数据源增强
查看>>
关于View控件中的Context选择
查看>>
2018icpc徐州OnlineA Hard to prepare
查看>>
Spark的启动进程详解
查看>>
使用命令创建数据库和表
查看>>
机器视觉:SSD Single Shot MultiBox Detector
查看>>
201521123044 《Java程序设计》第1周学习总结
查看>>
MIT Scheme 的基本使用
查看>>
程序员的“机械同感”
查看>>
在16aspx.com上下了一个简单商品房销售系统源码,怎么修改它的默认登录名和密码...
查看>>
c++回调函数
查看>>
linux下Rtree的安装
查看>>
【Java】 剑指offer(53-2) 0到n-1中缺失的数字
查看>>
Delphi中ListView类的用法
查看>>
多米诺骨牌
查看>>
Linq 学习(1) Group & Join--网摘
查看>>
asp.net 调用前台JS调用后台,后台掉前台JS
查看>>
Attribute(特性)与AOP
查看>>
苹果手表:大方向和谷歌一样,硬件分道扬镳
查看>>
Competing Consumers Pattern (竞争消费者模式)
查看>>