NPOI
是
POI
的
.Net
版本,可以在没安装
MS Office
的情况下操作
office
文档
(
OLE 2
复合文档结构
,
如
word
文档,
excel
文件等
).
使用NPOI只要引用dll就可,可在npoi.codeplex.com下载,NPOI 1.25支持.Net4.0,最新的版本是NPOI 2.0 RC。NPOI采用Apache2.0协议,从开发成员列表里看到很多的chinese,如TonyQu
主要命名空间有HSSF (Horrible SpreadSheet Format)、SS等。 在POI中,HSSF是指2007年以前的,XSSF是指2007年版本以上的 ,NPOI高版本中提倡不区分这种分别。
NPOI也有2种用户模式,UserModel与EventUserModel,UserModel满足一般的读写操作等,EventUserModel比前者有更高要求,需要使用者理解文档结构.(EventUserModel中只能进行读操作,这个自己没试过)。
列出asp.net中Excel文件导入导出操作:
上传Excel文件
<form id="form1" runat="server">
<div>
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="BtnUpload" runat="server" Text="upload" OnClick="BtnUpload_Click" />
</div>
</form>
//后台
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Data;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
namespace Excel.NPOI
{
public partial class Import : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void BtnUpload_Click(object sender, EventArgs e)
{
if (this.FileUpload1.PostedFile == null) return;
Stream fileStream = this.FileUpload1.PostedFile.InputStream;
IWorkbook workbook = new HSSFWorkbook(fileStream);
if (workbook == null || workbook.NumberOfSheets == 0) return;
ISheet sheet = workbook.GetSheetAt(0);
if (sheet.PhysicalNumberOfRows == 0) return;
IRow headRow = sheet.GetRow(0);
DataTable table = new DataTable();
foreach (ICell cell in headRow.Cells)
table.Columns.Add(new DataColumn(cell.StringCellValue));
for (int i = 1; i < sheet.PhysicalNumberOfRows; i++)
{
DataRow newrow = table.NewRow();
foreach(ICell cell in sheet.GetRow(i).Cells)
{
//转换复制
}
table.Rows.Add(newrow);
}
}
//continue
}
}
导出并下载
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Data;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
namespace Excel.NPOI
{
public partial class Export : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
ResponseStream();
}
private void ResponseStream()
{
string fileName = "成绩单.xls";//显示的文件名称
DataTable table = GetData();//获取所有待导出数据
MemoryStream ms = new MemoryStream();//内存流
IWorkbook workbook = new HSSFWorkbook();//建立excel文件
ISheet sheet = workbook.CreateSheet();//建立工作表
IRow headRow = sheet.CreateRow(0);//标题行
//手动设置各列,注意顺序要一致.
headRow.CreateCell(0).SetCellValue("准考证号");
headRow.CreateCell(1).SetCellValue("考点");
headRow.CreateCell(2).SetCellValue("考场");
int rowIndex = 1;
foreach (DataRow row in table.Rows)
{
IRow dataRow = sheet.CreateRow(rowIndex);
dataRow.CreateCell(0).SetCellValue(row[0].ToString());
dataRow.CreateCell(1).SetCellValue(row[1].ToString());
dataRow.CreateCell(2).SetCellValue(row[2].ToString());
rowIndex++;
}
workbook.Write(ms);
ms.Flush();
ms.Position = 0;
if (Request.Browser.Browser == "IE")
fileName = HttpUtility.UrlEncode(fileName);
Response.AddHeader("Content-Disposition", "attachment;fileName=" + fileName);
Response.BinaryWrite(ms.ToArray());
Response.End();
}
private DataTable GetData()
{
DataTable table = new DataTable();
table.Columns.Add(new DataColumn("准考证号"));
table.Columns.Add(new DataColumn("考点"));
table.Columns.Add(new DataColumn("考场"));
DataRow row1 = table.NewRow();
row1[0] = "111";
row1[1] = "考点1";
row1[2] = "1001";
table.Rows.Add(row1);
return table;
}
}
}