要約:[ASP.NET] NPOIは、Excelを使用して製造しました
序文
NPOIは、EXCELのレポートを生成するために必要な場合のために、EXCEL EXCELファイルをサードパーティのパッケージを素早く読み取り生成され、以下の簡単な使用、非常に使いやすいです。
例
ステップ1ダウンロードNPOI図書館
CodePlexには、ダウンロードを解凍し、NPOIライブラリをダウンロードしてください次のように完了しています:
DLLに参加する、アーカイブドキュメント内のいくつかは、他のを見てあなたは、私が4.0でbin.net DLLファイルのフォルダを使用するプロジェクトのDLLファイルを、参加したいサンプルファイルフォルダのための2つの例、ビンが含まれて取ることができますがあります新しいサイトを参照します。
ステップ2は、報告書のようなバージョンを作成します。
使用NPOIは次のように、関連分野の書式設定を表示しますEXCELも最初2003形式Office Excelファイルを作成し、私はパターンプロファイルの方法を使用して、この使用に基づいてレポートを生成するために、ファイルのEXCELのようなバージョンを使用することができるよう構築動的に所有することができます:
動作を開始することができますようにDefault.aspxページを追加したサブディレクトリの後に少しにファイルの後に、サイトでの良いサンプル生産。
ステップ3書かれたレポート生成されたクラス
次のステップは、例えば次のような方法は、ここでの唯一のおおよその方法を説明し、完全なプログラムを得ることができるプログラムを書き始めることです。
InitReport() 方法
InitReportプロセスでは、次のように設定された初期化レポートを設定するには:
- MaxCol:フィールドの総数は、図EXCELバーの5つの例のこのよう合計が、0から4となるように充填を開始します
- STARTROW:最初のカラム、タイトルバーなどのレポートのタイトルとして第2項のれる最初の例では、まあまあ2 0を満たす第三行からだけでなく、最初から始めます
- EXPORTPATH:そのようなパスEXCELを設定しますここで生成された保存するように生成するファイルパス、
- ExportFileName:生成されたファイルの名前
- TemplatePath : 样版档路径
- TemplateFileName : 样版文件的名称
- TemplateFilePath : 样版文件的完整路径
private void InitReport()
{
MaxCol = 4;
StartRow = 2;
ExportPath = "~/Rpt/Export/";
ExportFileName = "ProductReport.xls";
TemplatePath = "~/Rpt/Template/";
TemplateFileName = "TemplateReport.xls";
TemplateFilePath = TemplatePath + TemplateFileName;
}
LoadSheet() 方法
在LoadSheet方法中,将会开启指定的样板档,其中 HssfWorkbook.GetSheetAt(0) 这段主要为取得样版中指定的Sheet Index Number,想用Sheet名称取得话可以改用 GetSheet(string name) 方法。
因为之后要设定新增列的格式跟字体,所以额外建立 CreateCellStyle 与 CreateFont 对象,之所以不放在InserNewRow()法中产生是因为如每产生一列就新增模式对象,会造成Excel资源消耗而发生模式跑掉的问题。
private void LoadSheet()
{
FileStream file = new FileStream(HttpContext.Current.Server.MapPath(TemplateFilePath), FileMode.Open, FileAccess.Read); // 开启读取样版档
HssfWorkbook = new HSSFWorkbook(file);
Sheet = HssfWorkbook.GetSheetAt(0); // 取得Index为0的Sheet
CellStyle = HssfWorkbook.CreateCellStyle(); // 产生字段模式设定
Font = HssfWorkbook.CreateFont(); // 产生字体模式设定
}
InsertNewRow() 方法
在InsertNewRow方法中,主要的作用就是动态产生一列新列,产生后设定该列的模式与字体等等后回传该列让后续操作。
private IRow InsertNewRow()
{
IRow row;
ICell cell;
Sheet.ShiftRows(StartRow, Sheet.LastRowNum, 1);
row = Sheet.GetRow(StartRow); // 取得列
if (row == null)
row = Sheet.CreateRow(StartRow); // 若无该列则产生新列
for (int i = 0; i <= MaxCol; i++)
{
cell = row.CreateCell(i); // 产生字段
// 设定字段框线
CellStyle.BorderBottom = BorderStyle.THIN;
CellStyle.BorderLeft = BorderStyle.THIN;
CellStyle.BorderRight = BorderStyle.THIN;
CellStyle.BorderTop = BorderStyle.THIN;
// 设定对齐方式
CellStyle.Alignment = HorizontalAlignment.LEFT; // 水平
CellStyle.VerticalAlignment = VerticalAlignment.CENTER; // 垂直
CellStyle.WrapText = true; // 是否自动换行
// 设定字体
Font.FontName = "标楷体";
Font.FontHeightInPoints = 12;
CellStyle.SetFont(Font);
cell.CellStyle = CellStyle;
}
StartRow++;
return row;
}
ReportLogic() 方法
在ReportLogic方法中,主要就是报表逻辑的撰写,此处将依照要产生的报表需求撰写相关程序,直接取得样版中字段位置的方法就是使用 Sheet.GetRow(0).GetCell(0).SetCellValue("") 方法,如需要使用Excel的公式的话可以使用 row.GetCell(0).SetCellFormula(string formula) 方法,另外可以看到报表内容部分就是跑回圈取得来源数据后反复进行[ 新增列 > 指定列的字段值 ]动作。
private void ReportLogic()
{
// 报表标题
Sheet.GetRow(0).GetCell(0).SetCellValue("产品报表");
// 报表内容
foreach (ProductDao.ProductEntity entity in GetData())
{
IRow row = InsertNewRow(); // 插入新列
row.GetCell(0).SetCellValue(entity.ProductID);
row.GetCell(1).SetCellValue(entity.ProductName);
row.GetCell(2).SetCellValue(entity.ProductPrice);
row.GetCell(3).SetCellValue(entity.ProductNumber);
row.GetCell(4).SetCellFormula(string.Format("C{0}*D{0}", StartRow));
}
}
ExportExcel方法与SaveExcel方法
最后一步当然要将产生的数据输出,这边提供了两种输出方法
ExprotExcel() 方法为直接将网页转换ContentType后输出,Client端就可以直接跳出EXCEL下载窗口。
SaveExcel() 方法为将先文件保存在Server的主机上并且也回传文件路径回来。
public void ExportExcel()
{
// 设定网页ContentType
HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", ExportFileName));
HttpContext.Current.Response.Clear();
// 读取样版数据
LoadSheet();
// 执行报表逻辑
ReportLogic();
// 报表写入数据流
MemoryStream file = new MemoryStream();
HssfWorkbook.Write(file);
// 输出报表跳出下载窗口
HttpContext.Current.Response.BinaryWrite(file.GetBuffer());
HttpContext.Current.Response.End();
}
public string SaveExcel()
{
// 读取样版数据
LoadSheet();
// 执行报表逻辑
ReportLogic();
// 保存文件路径
string saveFilePath = ExportPath + ExportFileName;
// 报表写入数据流
FileStream file = new FileStream(HttpContext.Current.Server.MapPath(saveFilePath), FileMode.Create);
HssfWorkbook.Write(file);
file.Close();
// 回传产出文件路径
return saveFilePath;
}
以上就是一个基本的 NPOI 动态产生 EXCEL 的使用范例,基本上抓下来后依照这种方式作或添加新设定就可以产生EXCEL,而针 NPOI 对于 EXCEL 的操作方法还有很多种设定,例如合并栏、其它函数操作、画图形等等的功能可以去参考 NPOI 官方文档网站查询。
结果:
范例程序
TNPOI.rar
参考数据
官方网站
以上文章叙述如有错误及观念不正确,请不吝啬指教
如有侵权内容也请您与我反应~谢谢您 :)
原文:大专栏 [ASP.NET] 使用NPOI产生EXCEL