首先,打开Visual studio,新建项目,在Nuget中搜索并安装NPOI。

创建类 DataTableExcelConverter ,并引入以下命名空间
using System;
using System.Data;
using System.IO;
using NPOI.HSSF.UserModel; // 用于HSSFWorkbook
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel; // 用于XSSFWorkbook
添加静态方法SaveDataTableToExcel,代码如下
public static void SaveDataTableToExcel(DataTable dataTable, string filePath, bool isXlsx = true)
{
// 根据文件格式创建Workbook对象
IWorkbook workbook;
if (isXlsx)
{
workbook = new XSSFWorkbook();
}
else
{
workbook = new HSSFWorkbook();
}
// 创建Sheet对象
ISheet sheet = workbook.CreateSheet("Data");
// 将DataTable的列名写入Excel的第一行
int i = 0;
IRow excelRow = sheet.CreateRow(0);
foreach (DataColumn column in dataTable.Columns)
{
excelRow.CreateCell(i).SetCellValue(column.ColumnName);
i++;
}
i = 1;
// 将DataTable的行数据写入Excel
foreach (DataRow row in dataTable.Rows)
{
excelRow = sheet.CreateRow(i);
for (int j = 0; j < dataTable.Columns.Count; j++)
{
excelRow.CreateCell(j).SetCellValue(row[j].ToString());
}
i++;
}
// 自动调整列宽
for (int j = 0; j < dataTable.Columns.Count; j++)
{
sheet.AutoSizeColumn(j);
}
// 保存Workbook到文件
using (FileStream file = new FileStream(filePath, FileMode.Create))
{
workbook.Write(file);
}
// 关闭Workbook释放资源
workbook.Close();
}
该方法用于将DataTable内的数据存储到Excel文件中,其中dataTable是用于存储的数据,filePath是要报文Excel文件的路径, isXlsx表示存储格式是“xls”还是“xlsx”。
添加静态方*L法**oadExcelToDataTable,代码如下:
public static DataTable LoadExcelToDataTable(string filePath, int sheetIndex = 0)
{
// 创建一个空的DataTable
DataTable dataTable = new DataTable();
// 确定文件类型并创建相应的Workbook对象
IWorkbook workbook;
if (filePath.EndsWith(".xls", StringComparison.OrdinalIgnoreCase))
{
workbook = new HSSFWorkbook(new FileStream(filePath, FileMode.Open, FileAccess.Read));
}
else if (filePath.EndsWith(".xlsx", StringComparison.OrdinalIgnoreCase))
{
workbook = new XSSFWorkbook(new FileStream(filePath, FileMode.Open, FileAccess.Read));
}
else
{
throw new ArgumentException("Invalid Excel file format.");
}
// 获取指定的工作表
ISheet sheet = workbook.GetSheetAt(sheetIndex);
// 读取第一行作为列名
IRow headerRow = sheet.GetRow(0);
if (headerRow == null)
{
throw new InvalidOperationException("The specified sheet does not contain any data.");
}
// 遍历第一行的每个单元格,创建DataTable的列
for (int i = 0; i < headerRow.LastCellNum; i++)
{
var columnName = headerRow.GetCell(i)?.ToString() ?? #34;Column{i + 1}";
dataTable.Columns.Add(columnName);
}
// 读取工作表中的数据行,填充到DataTable中
for (int rowIndex = 1; rowIndex <= sheet.LastRowNum; rowIndex++)
{
IRow row = sheet.GetRow(rowIndex);
if (row != null)
{
DataRow dataRow = dataTable.NewRow();
for (int i = 0; i < row.LastCellNum; i++)
{
dataRow[i] = row.GetCell(i)?.ToString() ?? string.Empty;
}
dataTable.Rows.Add(dataRow);
}
}
// 关闭Workbook释放资源
workbook.Close();
return dataTable;
}
该方法用于将Excel文件转换为DataTable,"filePath"表示Excel文件的路径,sheetIndex"表示要读取的工作表索引,返回包含Excel数据的DataTable对象。