NPOI Excel

C# 使用NPOI匯出Excel文件

曾亞竺 2019/12/27 19:29:01
29623

概述

NPOI 是一個能夠快速讀取與產生Excel檔案的第三方套件,幫助程式開發人員在無安裝Microsoft Office的環境下讀寫Office 97-2003的文件支援的檔案格式包括xls, doc, ppt等,對於需要產生Excel報表非常好用。

 

安裝

工具列專案→管理NuGet套件

 

瀏覽→搜尋輸入NPOI→NPOI→安裝

範例

NPOI可透過兩種方式匯出Excel,一是使用Template,將Excel格式拉好存檔,透過NPOI讀取格式後,再將資料填入並另存新檔,本文範例則會將從無到有產生Excel檔案。

 

完整程式碼如下:

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using System.IO;
//取得資料
var result = this.studentService.GetStudentDataList(request).ToList();

//建立Excel
HSSFWorkbook hssfworkbook = new HSSFWorkbook(); //建立活頁簿
ISheet sheet = hssfworkbook.CreateSheet("sheet"); //建立sheet

//設定樣式
ICellStyle headerStyle = hssfworkbook.CreateCellStyle();
IFont headerfont = hssfworkbook.CreateFont();
headerStyle.Alignment = HorizontalAlignment.Center; //水平置中
headerStyle.VerticalAlignment = VerticalAlignment.Center; //垂直置中
headerfont.FontName = "微軟正黑體";
headerfont.FontHeightInPoints = 20;
headerfont.Boldweight =(short)FontBoldWeight.Bold;
headerStyle.SetFont(headerfont);

//新增標題列
sheet.CreateRow(0); //需先用CreateRow建立,才可通过GetRow取得該欄位
sheet.AddMergedRegion(new CellRangeAddress(0, 1, 0, 2)); //合併1~2列及A~C欄儲存格
sheet.GetRow(0).CreateCell(0).SetCellValue("昕力大學");
sheet.GetRow(0).GetCell(0).CellStyle = headerStyle; //套用樣式
sheet.CreateRow(2).CreateCell(0).SetCellValue("學生編號");
sheet.GetRow(2).CreateCell(1).SetCellValue("學生姓名");
sheet.GetRow(2).CreateCell(2).SetCellValue("就讀科系");

//填入資料
int rowIndex = 3;
for (int row = 0; row < result.Count(); row++)
{       
    sheet.CreateRow(rowIndex).CreateCell(0).SetCellValue(result[row].StudentNo);
    sheet.GetRow(rowIndex).CreateCell(1).SetCellValue(result[row].StudentName);
    sheet.GetRow(rowIndex).CreateCell(2).SetCellValue(result[row].Department);
    rowIndex++;
}

var excelDatas = new MemoryStream();
hssfworkbook.Write(excelDatas);

return File(excelDatas.ToArray(), "application/vnd.ms-excel", string.Format($"學生資料.xls"));

 

匯出結果如下:


曾亞竺