这里是使用NPOI实现Excel和DataTable互转的完整攻略,包括具体的步骤和两条示例说明。
1. 安装NPOI库
首先需要安装NPOI库,可以使用NuGet进行安装。在Visual Studio中打开NuGet控制台,输入以下命令来安装NPOI库:
Install-Package NPOI
2. 读取Excel文件
读取Excel文件可以使用HSSFWorkbook或XSSFWorkbook类,它们用于处理xls和xlsx格式的Excel文件。下面是读取Excel文件的代码示例:
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using NPOI.HSSF.UserModel;
using System.IO;
// 读取Excel文件
public DataTable ReadExcel(string fileName)
{
string fileExtension = Path.GetExtension(fileName);
ISheet sheet = null;
DataTable data = new DataTable();
using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read))
{
if (fileExtension == ".xls")
{
HSSFWorkbook workbook = new HSSFWorkbook(fs);
sheet = workbook.GetSheetAt(0);
}
else if (fileExtension == ".xlsx")
{
XSSFWorkbook workbook = new XSSFWorkbook(fs);
sheet = workbook.GetSheetAt(0);
}
IRow headerRow = sheet.GetRow(0);
int cellCount = headerRow.LastCellNum;
for (int i = headerRow.FirstCellNum; i < cellCount; i++)
{
DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);
data.Columns.Add(column);
}
for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
{
IRow row = sheet.GetRow(i);
DataRow dataRow = data.NewRow();
for (int j = row.FirstCellNum; j < cellCount; j++)
{
if (row.GetCell(j) != null)
{
dataRow[j] = row.GetCell(j).ToString();
}
}
data.Rows.Add(dataRow);
}
}
return data;
}
3. 处理DataTable
DataTable是在内存中表示的数据表,可以对其进行增删改查等操作。在处理DataTable时最常用的方法是使用foreach循环,以下是一些常用的处理方法:
DataTable dt = ReadExcel("data.xlsx");
// 遍历DataTable
foreach (DataRow row in dt.Rows)
{
foreach (DataColumn column in dt.Columns)
{
Console.WriteLine(row[column]);
}
}
// 添加行
DataRow newRow = dt.NewRow();
newRow["Name"] = "Tom";
newRow["Age"] = 18;
dt.Rows.Add(newRow);
// 删除行
foreach (DataRow row in dt.Rows)
{
if (row["Age"].ToString() == "20")
{
dt.Rows.Remove(row);
}
}
// 修改行
foreach (DataRow row in dt.Rows)
{
if (row["Name"].ToString() == "Tom")
{
row["Age"] = 20;
}
}
// 查询行
DataRow[] rows = dt.Select("Name='Tom'");
foreach (DataRow row in rows)
{
Console.WriteLine(row["Age"]);
}
// 排序
DataView view = dt.DefaultView;
view.Sort = "Age DESC";
dt = view.ToTable();
4. 写入Excel文件
使用NPOI可以方便地将数据写入Excel文件中。以下是将DataTable数据写入Excel文件的代码示例:
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using NPOI.HSSF.UserModel;
using System.IO;
// 写入Excel文件
public void WriteExcel(string fileName, DataTable data)
{
IWorkbook workbook = null;
if (Path.GetExtension(fileName) == ".xls")
{
workbook = new HSSFWorkbook();
}
else
{
workbook = new XSSFWorkbook();
}
ISheet sheet = workbook.CreateSheet("Sheet1");
IRow headerRow = sheet.CreateRow(0);
// 写入表头
for (int i = 0; i < data.Columns.Count; i++)
{
headerRow.CreateCell(i).SetCellValue(data.Columns[i].ColumnName);
}
// 写入数据
for (int i = 0; i < data.Rows.Count; i++)
{
IRow row = sheet.CreateRow(i + 1);
for (int j = 0; j < data.Columns.Count; j++)
{
row.CreateCell(j).SetCellValue(data.Rows[i][j].ToString());
}
}
// 保存Excel文件
using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write))
{
workbook.Write(fs);
}
}
5. 示例说明
以下是两个示例说明,分别是读取Excel文件和写入Excel文件。
示例1:读取Excel文件
假设有一个名为data.xlsx的Excel文件,其中包含以下内容:
Name | Age | Gender |
---|---|---|
Alice | 23 | F |
Bob | 25 | M |
要读取该文件并将其转换为DataTable,可以使用以下代码:
DataTable dt = ReadExcel("data.xlsx");
读取完成后,可以使用以下方法对DataTable进行处理:
foreach (DataRow row in dt.Rows)
{
Console.WriteLine(row["Name"]);
}
示例2:写入Excel文件
假设有一个名为data的DataTable,其中包含以下内容:
Name | Age |
---|---|
Alice | 23 |
Bob | 25 |
Charlie | 18 |
要将该DataTable写入名为output.xlsx的Excel文件中,可以使用以下代码:
WriteExcel("output.xlsx", data);
写入完成后,可以打开output.xlsx文件查看其内容。
以上便是使用NPOI实现Excel和DataTable互转的完整攻略,希望能对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#使用NPOI实现Excel和DataTable的互转 - Python技术站