C#使用NPOI實現將表格中數據導入Excel
在C#中,使用NPOI庫將表格數據導入Excel的操作相對直接。NPOI是.NET版本的POI,可以幫助我們在沒有安裝Microsoft Office的情況下讀寫Office文件,如xls和xlsx。以下是使用NPOI將DataTable導出到Excel的基本步驟:
創(chuàng)建工作簿:首先,你需要創(chuàng)建一個IWorkbook對象,這是Excel文件的開始。
創(chuàng)建工作表:使用workbook.CreateSheet("Sheet1")創(chuàng)建一個新的工作表。
創(chuàng)建表頭:通過遍歷DataTable的列來創(chuàng)建Excel文件的表頭。
填充數據:遍歷DataTable的每一行,并為每個單元格填充數據。
寫入文件:最后,將工作簿寫入到文件流中,保存為Excel文件。
下面是一個簡單的示例代碼,展示了如何將DataTable導出到Excel文件:
using NPOI.XSSF.UserModel; // 用于處理xlsx文件 using NPOI.HSSF.UserModel; // 用于處理xls文件 using System.Data; using System.IO; public void ExportToExcel(DataTable dt, string filePath) { IWorkbook workbook; // 根據文件擴展名選擇工作簿類型 if (Path.GetExtension(filePath).Equals(".xlsx", StringComparison.OrdinalIgnoreCase)) { workbook = new XSSFWorkbook(); } else { workbook = new HSSFWorkbook(); } ISheet sheet = workbook.CreateSheet("Sheet1"); // 創(chuàng)建表頭 IRow headerRow = sheet.CreateRow(0); for (int i = 0; i < dt.Columns.Count; i++) { headerRow.CreateCell(i).SetCellValue(dt.Columns[i].ColumnName); } // 填充數據 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()); } } // 寫入文件 using (FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write)) { workbook.Write(fileStream); } }
在上述代碼中,我們首先檢查文件擴展名來決定創(chuàng)建XSSFWorkbook
(用于.xlsx
文件)還是HSSFWorkbook
(用于.xls
文件)。然后,我們創(chuàng)建一個工作表,并填充表頭和數據。最后,我們將工作簿寫入到指定的文件路徑。
實際中第一步
private void BtnDerive_Click(object sender, EventArgs e) { SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = "Excel files (*.xlsx)|*.xlsx"; saveFileDialog.Title = "選擇導出文件保存位置"; saveFileDialog.FileName = GetFileName(); if (saveFileDialog.ShowDialog() == DialogResult.OK) { Export(dataGridView1, saveFileDialog.FileName); } } private string GetFileName() { return $"產品類型表_{DateTime.Now:yyyyMMddHHmmss}.xlsx"; } private void Export(DataGridView dgv, string fileName) { try { IWorkbook wb = new XSSFWorkbook(); //NPOI 使用HSSFWorkbook 類來處理 xls,XSSFWorkbook 類來處理 xlsx。 //它們都繼承接口 IWorkbook,通過 IWorkbook 來統(tǒng)一處理 xls 和 xlsx 格式的文件 ISheet sheet = wb.CreateSheet(); IRow row; //獲取DataGridView的列名,其中 i 表示低級列,i從0開始 row = sheet.CreateRow(0); // 生成標題,注意第一列是“操作”列,不處理 for (int k = 1; k < dgv.Columns.Count; k++) { row.CreateCell(k - 1).SetCellValue(dgv.Columns[k].HeaderText.ToString()); } for (int i = 0; i < dgv.Rows.Count; i++) { row = sheet.CreateRow(i + 1); for (int k = 1; k < dgv.Columns.Count; k++) { string value = dgv.Rows[i].Cells[k].Value == null ? "" : dgv.Rows[i].Cells[k].Value.ToString(); row.CreateCell(k - 1).SetCellValue(value); } } using (var fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite)) { wb.Write(fs); //寫入到Excel中 } MessageBox.Show("保存成功,文件名:" + fileName, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception ex) { MessageBox.Show(ex.Message, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
c# 使用NPOI將DataTable 寫入Excel 中的數據類型轉換
方法一
using System; using System.Data; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; public class ExcelWriter { public static void WriteDataTableToExcel(DataTable dataTable, string filePath) { // 創(chuàng)建一個新的工作簿 IWorkbook workbook = new XSSFWorkbook(); // 創(chuàng)建一個工作表 ISheet sheet = workbook.CreateSheet("Sheet1"); // 創(chuàng)建標題行 IRow headerRow = sheet.CreateRow(0); for (int i = 0; i < dataTable.Columns.Count; i++) { headerRow.CreateCell(i).SetCellValue(dataTable.Columns[i].ColumnName); } // 填充數據行 int rowIndex = 1; foreach (DataRow row in dataTable.Rows) { IRow dataRow = sheet.CreateRow(rowIndex++); for (int i = 0; i < dataTable.Columns.Count; i++) { DataColumn column = dataTable.Columns[i]; ICell cell = dataRow.CreateCell(i); switch (column.DataType.Name.ToLower()) { case "string": cell.SetCellValue(row[i].ToString()); break; case "int32": case "int64": cell.SetCellValue(Convert.ToInt32(row[i])); break; case "double": cell.SetCellValue(Convert.ToDouble(row[i])); break; case "datetime": cell.SetCellValue(Convert.ToDateTime(row[i])); break; case "boolean": cell.SetCellValue(Convert.ToBoolean(row[i])); break; default: cell.SetCellValue(row[i].ToString()); break; } } } // 將工作簿寫入文件 using (var fs = new FileStream(filePath, FileMode.Create, FileAccess.Write)) { workbook.Write(fs); } } }
方法二
public static void CreateSheet(IWorkbook workbook, DataTable dt, int num) { ISheet sheet = string.IsNullOrEmpty(dt.TableName) ? workbook.CreateSheet("Sheet" + num) : workbook.CreateSheet(dt.TableName); ICellStyle style = workbook.CreateCellStyle();//設置表格樣式 style.BorderBottom = BorderStyle.Thin;//下邊框線(給表格加入背景顏色后,就會覆蓋原來的邊框,直接設置邊框樣式可以解決這一問題) style.BorderLeft = BorderStyle.Thin; //左邊框線 style.BorderRight = BorderStyle.Thin;//右邊框線 style.BorderTop = BorderStyle.Thin;//上邊框線 sheet.PrintSetup.PaperSize = 9;//A4紙張打印 sheet.PrintSetup.Landscape = true;//橫向打印(默認為false即豎向) //設置自動調整為一頁寬度 sheet.Autobreaks = false;//必須設置 sheet.FitToPage = true; //一頁寬 sheet.PrintSetup.FitWidth = 1; sheet.PrintSetup.FitHeight = short.MaxValue; //表頭 IRow row = sheet.CreateRow(0); for (int i = 0; i < dt.Columns.Count; i++) { ICell cell = row.CreateCell(i); cell.SetCellValue(dt.Columns[i].ColumnName); cell.CellStyle = style; } //數據 for (int i = 0; i < dt.Rows.Count; i++) { IRow row1 = sheet.CreateRow(i + 1); for (int j = 0; j < dt.Columns.Count; j++) { ICell cell = row1.CreateCell(j); cell.CellStyle = style; if (dt.Columns[j].DataType.Equals(typeof(bool)) && bool.TryParse(dt.Rows[i][j].ToString(), out bool b)) { cell.SetCellValue(b); } else if (double.TryParse(dt.Rows[i][j].ToString(), out double d))//數字格式 { cell.SetCellValue(d); } else { cell.SetCellValue(dt.Rows[i][j].ToString()); } } } for (int columnIndex = 0; columnIndex < dt.Rows.Count; columnIndex++) { sheet.AutoSizeColumn(columnIndex); //列寬自適應 } }
到此這篇關于C#使用NPOI實現將表格中數據導入Excel的文章就介紹到這了,更多相關C# NPOI數據導入Excel內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
VS2015為console.readkey添加代碼片段的方法
這篇文章主要介紹了VS2015為console.readkey添加代碼片段的方法,需要的朋友可以參考下2016-12-12