使用NPOI庫導出Excel文件可以按照以下步驟進行:
-
添加NPOI庫的引用:在項目中添加對NPOI庫的引用。
-
創建一個新的Excel文件對象:使用NPOI中的
HSSFWorkbook
(對應.xls
格式)或XSSFWorkbook
(對應.xlsx
格式)來創建一個新的Excel文件對象。
var workbook = new HSSFWorkbook(); // 或者使用 XSSFWorkbook()
- 創建一個工作表對象:使用
workbook.CreateSheet()
方法創建一個新的工作表對象。
var sheet = workbook.CreateSheet("Sheet1");
- 創建行和單元格:使用
sheet.CreateRow()
方法創建新的行對象,然后使用row.CreateCell()
方法在行中創建單元格。
var row = sheet.CreateRow(0);
var cell = row.CreateCell(0);
- 設置單元格的值:使用
cell.SetCellValue()
方法設置單元格的值。
cell.SetCellValue("Hello World!");
- 保存Excel文件:使用
FileStream
將Excel文件保存到指定的路徑。
using (var fs = new FileStream("path/to/file.xls", FileMode.Create, FileAccess.Write))
{workbook.Write(fs);
}
完整的示例代碼如下:
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using System.IO;class Program
{static void Main(string[] args){var workbook = new HSSFWorkbook();var sheet = workbook.CreateSheet("Sheet1");var row = sheet.CreateRow(0);var cell = row.CreateCell(0);cell.SetCellValue("Hello World!");using (var fs = new FileStream("path/to/file.xls", FileMode.Create, FileAccess.Write)){workbook.Write(fs);}}
}
注意:在使用NPOI庫之前,需要將該庫添加到項目中,可以通過NuGet包管理器添加NPOI庫的引用。
接口示例
/// <summary>/// 導出/// </summary>/// <param name="ids"></param>/// <returns></returns>[HttpPost]public FileStreamResult ExportExcel(List<IdInDto> ids){string zipPath = @$"{ExcelExporter.GetImportDir()}\{GUIDHelper.NewGuid}.zip";foreach (var item in dic){string filePath = @$"{ExcelExporter.GetImportDir()}\{item.Key}.xlsx";//生成excel邏輯ExcelExporter.AddFileToZip(zipPath, filePath);}FileStream fileStream = new FileStream(zipPath, FileMode.Open, FileAccess.Read);return new FileStreamResult(fileStream, "application/octet-stream") { FileDownloadName = "導出.zip" };}
public class ExcelExporter{/// <summary>/// 創建目錄/// </summary>/// <returns></returns>public static string GetImportDir(){string fileFolder = Path.Combine(AppContext.BaseDirectory, $"Export");fileFolder += "\\" + DateTime.Now.Date.ToString("yyyy-MM-dd");FileHelper.CreateIfNotExists(fileFolder);return fileFolder;}/// <summary>/// 添加文件到zip/// </summary>/// <param name="zipPath"></param>/// <param name="fileToAdd"></param>/// <exception cref="FileNotFoundException"></exception>public static void AddFileToZip(string zipPath, string fileToAdd){// 確保要添加的文件存在if (!File.Exists(fileToAdd)){throw new FileNotFoundException("文件未找到。");}// 確保ZIP文件存在if (!File.Exists(zipPath)){using (ZipArchive zipArchive = ZipFile.Open(zipPath, ZipArchiveMode.Create)){// 添加文件到ZIP文件中zipArchive.CreateEntryFromFile(fileToAdd, Path.GetFileName(fileToAdd));}}else{using (ZipArchive zipArchive = ZipFile.Open(zipPath, ZipArchiveMode.Update)){// 添加文件到ZIP文件中zipArchive.CreateEntryFromFile(fileToAdd, Path.GetFileName(fileToAdd));}}}}