無需手動下載 DLL、無需設定相對路徑、無需擔心版本衝突。Visual Studio 內建的 NuGet 會自動處理下載、解壓、引用、packages.config/PackageReference 記錄、甚至 web.config 繫結重導向。
NPOI 套件 (圖示通常是藍色圓形)。NPOI.dll, NPOI.OOXML.dll, NPOI.OpenXml4Net.dll 等) 已複製到專案 packages\NPOI.x.x.x\lib\netXX 並**自動添加參考**。.csproj) 新增 PackageReference Include="NPOI" Version="x.x.x" /> (新版 VS) 或 packages.config (舊版)。SharpZipLib 也會一併安裝好。using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel; // .xlsx
using NPOI.HSSF.UserModel; // .xls
using System.IO;
using System.Data;
public byte[] ExportDataTableToExcel(DataTable dt, string sheetName = "Sheet1", bool isXlsx = true) {
IWorkbook workbook = isXlsx ? (IWorkbook)new XSSFWorkbook() : new HSSFWorkbook();
ISheet sheet = workbook.CreateSheet(sheetName);
// 標題行
IRow headerRow = sheet.CreateRow(0);
for (int i = 0; i < dt.Columns.Count; i++) {
headerRow.CreateCell(i).SetCellValue(dt.Columns[i].ColumnName);
// 可選:設定標題樣式 (粗體、背景色)
// ICellStyle style = workbook.CreateCellStyle(); ...
}
// 數據行
for (int i = 0; i < dt.Rows.Count; i++) {
IRow row = sheet.CreateRow(i + 1);
for (int j = 0; j < dt.Columns.Count; j++) {
row.CreateCell(j).SetCellValue(dt.Rows[i][j]?.ToString() ?? "");
}
}
// 自動調整欄寬
for (int i = 0; i < dt.Columns.Count; i++) sheet.AutoSizeColumn(i);
using (MemoryStream ms = new MemoryStream()) {
workbook.Write(ms);
return ms.ToArray();
}
}
// ASP.NET 下載觸發
public void DownloadExcel() {
DataTable dt = GetData(); // 你的資料來源
byte[] file = ExportDataTableToExcel(dt, "報表", true);
Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("Content-Disposition", "attachment;filename=Export_" + DateTime.Now.ToString("yyyyMMddHHmm") + ".xlsx");
Response.BinaryWrite(file);
Response.End();
}
nuget.org (工具 > 選項 > NuGet 套件管理器 > 套件來源)。SXSSFWorkbook (僅 .xlsx) 實現串流寫入,只在記憶體保留滑動視窗行數。IWorkbook wb = new SXSSFWorkbook(100); // 保留100行在記憶體**拒絕手動複製 DLL、拒絕百度搜「NPOI.dll 下載」。** 使用 NuGet 是 .NET 開發者的基本功,一鍵解決引用、版本、相依、升級所有痛點。安裝後直接 using NPOI... 開始寫導出邏輯即可。