# 工作筆記 #3 - NPOI 匯出 Excel 需求 --- > 匯出 Excel 功能將 Microsoft.Office.Interop.Excel 套件更改為使用 NPOI <br /> 安裝 NPOI --- > NuGet套件 → 瀏覽 → 搜尋輸入NPOI → NPOI → 安裝 ![](https://i.imgur.com/S2XhLD3.png) <br /> 程式說明 --- > 建立 Excel ``` // 建立Excel XSSFWorkbook workbook = new XSSFWorkbook(); // 建立活頁簿 ISheet workSheet = workbook.CreateSheet("Sheet名稱"); // 建立sheet ``` ###### 備註: ###### HSSFWorkbook:建立檔案為.xls檔。XSSFWorkbook:建立檔案為.xlsx檔。 ###### HSSF對應:HSSFWorkbook、HSSFSheet、HSSFRow、HSSFCell…… ###### XSSF對應:XSSFWorkbook、XSSFSheet、XSSFRow、XSSFCell…… <br /> > 設定儲存格樣式 ``` ICellStyle style = workbook.CreateCellStyle(); // 設定水平、垂直置中 style.Alignment = HorizontalAlignment.Left; style.VerticalAlignment = VerticalAlignment.Center; // 設定字型 NPOI.SS.UserModel.IFont font = workbook.CreateFont(); font.FontName = "新細明體"; font.FontHeightInPoints = 12; style.SetFont(font); // 設定底色 style.FillForegroundColor = IndexedColors.Gold.Index; style.FillPattern = FillPattern.SolidForeground; // 設定邊框位置與粗度 style.BorderTop = BorderStyle.Thin; ``` <br /> > 儲存格放入值與樣式 ``` // 紀錄顯示欄位 List<string> showColumn = new List<string>() { "col1", "col2", "col3", "col4" }; // 新增一列 workSheet.CreateRow(0); for (int col = 0; col < showColumn.Count; col++) { // 設定儲存格值 workSheet.GetRow(0).CreateCell(col).SetCellValue(showColumn[col]); // 套用樣式 workSheet.GetRow(0).GetCell(col).CellStyle = style; } ``` ###### 其他設定 ``` // 設定前都需先建立新行 workSheet.CreateRow(1); // 合併欄位,CellRangeAddress(開始行, 結束行, 開始列, 結束列) workSheet.AddMergedRegion(new CellRangeAddress(1, 1, 0, 4)); // 設定行高 workSheet.GetRow(1).Height = 3 * 256; // 設定圖片 byte[] image = System.IO.File.ReadAllBytes(Server.MapPath("~/image/test.png")); int pictureIndex = workbook.AddPicture(image, PictureType.PNG); ICreationHelper helper = workbook.GetCreationHelper(); NPOI.SS.UserModel.IDrawing drawing = workSheet.CreateDrawingPatriarch(); IClientAnchor anchor = helper.CreateClientAnchor(); // 設定圖片位置 anchor.Col1 = 0; anchor.Col2 = 1; anchor.Row1 = 1; anchor.Row2 = 2; NPOI.SS.UserModel.IPicture picture = drawing.CreatePicture(anchor, pictureIndex); picture.Resize(2, 2); // 設定圖片大小 ``` <br /> > 儲存 Excel ``` // 儲存匯出的 Excel string fileName = "測試匯出.xlsx"; string path = Path.Combine(Server.MapPath("~/App_Data"), fileName); // 將記憶體中的資料寫入磁碟 using (FileStream filestream = new FileStream(path, FileMode.Create)) { workbook.Write(filestream); filestream.Close(); } ``` <br /> ###### tags: `NPOI` `EXCEL` --- 參考資料 > https://www.tpisoftware.com/tpu/articleDetails/1654 > https://www.itread01.com/content/1504860973.html