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-01
C#中使用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í)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02
VS2015為console.readkey添加代碼片段的方法
這篇文章主要介紹了VS2015為console.readkey添加代碼片段的方法,需要的朋友可以參考下2016-12-12
C#實(shí)現(xiàn)簡單學(xué)生信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)簡單學(xué)生信息管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-06-06
基于C#實(shí)現(xiàn)手機(jī)號碼歸屬地接口調(diào)用
這篇文章主要介紹了基于C#實(shí)現(xiàn)手機(jī)號碼歸屬地接口調(diào)用的相關(guān)資料,需要的朋友可以參考下2016-02-02

