C#使用NPOI實(shí)現(xiàn)將表格中數(shù)據(jù)導(dǎo)入Excel
在C#中,使用NPOI庫將表格數(shù)據(jù)導(dǎo)入Excel的操作相對直接。NPOI是.NET版本的POI,可以幫助我們在沒有安裝Microsoft Office的情況下讀寫Office文件,如xls和xlsx。以下是使用NPOI將DataTable導(dǎo)出到Excel的基本步驟:
創(chuàng)建工作簿:首先,你需要創(chuàng)建一個IWorkbook對象,這是Excel文件的開始。
創(chuàng)建工作表:使用workbook.CreateSheet("Sheet1")創(chuàng)建一個新的工作表。
創(chuàng)建表頭:通過遍歷DataTable的列來創(chuàng)建Excel文件的表頭。
填充數(shù)據(jù):遍歷DataTable的每一行,并為每個單元格填充數(shù)據(jù)。
寫入文件:最后,將工作簿寫入到文件流中,保存為Excel文件。
下面是一個簡單的示例代碼,展示了如何將DataTable導(dǎo)出到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; // 根據(jù)文件擴(kuò)展名選擇工作簿類型 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); } // 填充數(shù)據(jù) 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); } }
在上述代碼中,我們首先檢查文件擴(kuò)展名來決定創(chuàng)建XSSFWorkbook
(用于.xlsx
文件)還是HSSFWorkbook
(用于.xls
文件)。然后,我們創(chuàng)建一個工作表,并填充表頭和數(shù)據(jù)。最后,我們將工作簿寫入到指定的文件路徑。
實(shí)際中第一步
private void BtnDerive_Click(object sender, EventArgs e) { SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = "Excel files (*.xlsx)|*.xlsx"; saveFileDialog.Title = "選擇導(dǎo)出文件保存位置"; saveFileDialog.FileName = GetFileName(); if (saveFileDialog.ShowDialog() == DialogResult.OK) { Export(dataGridView1, saveFileDialog.FileName); } } private string GetFileName() { return $"產(chǎn)品類型表_{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); // 生成標(biāo)題,注意第一列是“操作”列,不處理 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 中的數(shù)據(jù)類型轉(zhuǎn)換
方法一
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)建標(biāo)題行 IRow headerRow = sheet.CreateRow(0); for (int i = 0; i < dataTable.Columns.Count; i++) { headerRow.CreateCell(i).SetCellValue(dataTable.Columns[i].ColumnName); } // 填充數(shù)據(jù)行 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();//設(shè)置表格樣式 style.BorderBottom = BorderStyle.Thin;//下邊框線(給表格加入背景顏色后,就會覆蓋原來的邊框,直接設(shè)置邊框樣式可以解決這一問題) style.BorderLeft = BorderStyle.Thin; //左邊框線 style.BorderRight = BorderStyle.Thin;//右邊框線 style.BorderTop = BorderStyle.Thin;//上邊框線 sheet.PrintSetup.PaperSize = 9;//A4紙張打印 sheet.PrintSetup.Landscape = true;//橫向打?。J(rèn)為false即豎向) //設(shè)置自動調(diào)整為一頁寬度 sheet.Autobreaks = false;//必須設(shè)置 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; } //數(shù)據(jù) 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))//數(shù)字格式 { cell.SetCellValue(d); } else { cell.SetCellValue(dt.Rows[i][j].ToString()); } } } for (int columnIndex = 0; columnIndex < dt.Rows.Count; columnIndex++) { sheet.AutoSizeColumn(columnIndex); //列寬自適應(yīng) } }
到此這篇關(guān)于C#使用NPOI實(shí)現(xiàn)將表格中數(shù)據(jù)導(dǎo)入Excel的文章就介紹到這了,更多相關(guān)C# NPOI數(shù)據(jù)導(dǎo)入Excel內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
WPF使用webView實(shí)現(xiàn)顯示瀏覽器網(wǎng)頁
在WPF中顯示一個可以操作的瀏覽器界面,你可以使用WebBrowser控件或WebView2控件,下面我們就來看看如何分別使用這兩個控件實(shí)現(xiàn)顯示瀏覽器網(wǎng)頁吧2025-01-01C#中使用Dapper進(jìn)行數(shù)據(jù)庫訪問的流程步驟
在C#中,Dapper是一個非常流行的ORM(對象關(guān)系映射)工具,它提供了一個輕量級的方式來訪問數(shù)據(jù)庫,Dapper通過SQL語句與數(shù)據(jù)庫進(jìn)行交互,并將結(jié)果映射到.NET對象中,以下是如何在C#中使用Dapper進(jìn)行數(shù)據(jù)庫訪問的基本步驟,需要的朋友可以參考下2024-12-12使用C#實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)堆的代碼
這篇文章主要介紹了使用C#實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)堆,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02VS2015為console.readkey添加代碼片段的方法
這篇文章主要介紹了VS2015為console.readkey添加代碼片段的方法,需要的朋友可以參考下2016-12-12C#實(shí)現(xiàn)簡單學(xué)生信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)簡單學(xué)生信息管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06基于C#實(shí)現(xiàn)手機(jī)號碼歸屬地接口調(diào)用
這篇文章主要介紹了基于C#實(shí)現(xiàn)手機(jī)號碼歸屬地接口調(diào)用的相關(guān)資料,需要的朋友可以參考下2016-02-02