在.NET框架中,使用C#进行Excel数据与DataTable之间的转换是数据分析、报表生成、数据迁移等操作中的常见需求。这一过程涉及到将Excel文件中的数据读取并加载至DataTable中,以便于利用.NET提供的丰富数据处理功能进行操作,同时也包括将DataTable中的数据导出至Excel文件,以实现数据的可视化或共享。本文将介绍如何通过C#语言实现Excel数据与DataTable之间的高效转换。
文章目录
本文使用的方法需要用到免费的Free Spire.XLS for .NET,NuGet:PM> Install-Package FreeSpire.XLS
。
将数据从DataTable导出到Excel文件
我们可以使用Worksheet.AllocatedRange
属性获取Excel工作表中的已使用的单元格范围,然后根据行数和列数,读取数据并添加到DataTable
对象中。以下是操作步骤:
- 导入所需模块。
- 创建
Workbook
对象,使用Workbook.LoadFromFile()
方法载入Excel文件。 - 使用
Workbook.Worksheets[]
属性获取需要的工作表。 - 创建
DataTable
实例。 - 遍历工作表第一行数据,使用
Worksheet.AllocatedRange[].Value
属性获取其中单元格的值,最后使用DataTable.Columns.Add()
方法将其导入为DataTable
的列名。 - 遍历剩余各行,使用同样的方法获取单元格数据,并写入到
DataTable
各行中。 - 输出结果。
代码示例
csharp
using Spire.Xls;
using System.Data;
namespace ExcelToDataTable
{
class Program
{
static void Main(string[] args)
{
// 创建Workbook的实例
Workbook wb = new Workbook();
// 载入Excel文件
wb.LoadFromFile("Sample.xlsx");
// 获取一个工作表
Worksheet sheet = wb.Worksheets[0];
// 创建一个DataTable实例
DataTable dataTable = new DataTable();
// 将第一行作为列名添加到DataTable
for (int col = 1; col <= sheet.AllocatedRange.ColumnCount; col++)
{
if (sheet.AllocatedRange[1, col].Value != null)
{
dataTable.Columns.Add(sheet.AllocatedRange[1, col].Value);
}
}
// 遍历其余行并将数据添加到DataTable
for (int row = 2; row <= sheet.AllocatedRange.RowCount; row++)
{
DataRow dataRow = dataTable.NewRow();
for (int col = 1; col <= sheet.AllocatedRange.ColumnCount; col++)
{
if (sheet.AllocatedRange[row, col].Value != null)
{
dataRow[col - 1] = sheet.AllocatedRange[row, col].Value;
}
}
dataTable.Rows.Add(dataRow);
}
// 输出列名
foreach (DataColumn column in dataTable.Columns)
{
Console.Write(column.ColumnName + "\t");
}
Console.WriteLine();
// 输出数据行
foreach (DataRow row in dataTable.Rows)
{
foreach (var item in row.ItemArray)
{
Console.Write(item + "\t");
}
Console.WriteLine();
}
}
}
}
结果
将数据从Excel表格导入DataTable
Worksheet.Range[].Value
属性可以帮助我们直接向Excel工作表中的指定单元格写入数据。我们可以将从其他地方获取到的DataTable
对象中的数据搭配此属性写入到Excel文件中。以下是操作步骤:
- 导入所需模块。
- 定义数据并使用数据构建
DataTable
对象。 - 创建
Workbook
实例。 - 使用
Workbook.Worksheets.Clear()
方法清除默认工作表,然后使用Workbook.Worksheets.Add()
方法新建工作表。 - 遍历
DataTable
列,使用DataTable.Columns[].ColumnName
属性获取列名,最后使用Worksheet.Range[].Value
属性将列名写入工作表。 - 遍历
DataTable
数据行和列,使用DataTable.Rows[][].ToString()
方法获取数据为字符串,最后使用Worksheet.Range[].Value
属性将数据写入工作表。 - 使用
Workbook.SaveToFile()
方法保存Excel文件。 - 释放资源。
代码示例
csharp
using Spire.Xls;
using System.Data;
namespace DataTableToExcel
{
class Program
{
static void Main(string[] args)
{
// 定义数据列表并创建一个DataTable实例
string[,] data = new string[,]
{
{ "Product", "Quantity", "SalesAmount" },
{ "Product A", "100", "5000.0" },
{ "Product B", "150", "7500.0" },
{ "Product C", "200", "10000.0" },
{ "Product D", "120", "6000.0" },
{ "Product E", "180", "9000.0" }
};
DataTable dataTable = new DataTable();
// 获取列数
int columnCount = data.GetLength(1);
// 添加列
for (int col = 0; col < columnCount; col++)
{
dataTable.Columns.Add(data[0, col]);
}
// 添加数据行
for (int row = 1; row < data.GetLength(0); row++)
{
DataRow dataRow = dataTable.NewRow();
for (int col = 0; col < columnCount; col++)
{
dataRow[col] = data[row, col];
}
dataTable.Rows.Add(dataRow);
}
// 创建Workbook的实例
Workbook workbook = new Workbook();
// 清除默认工作表并添加一个工作表
workbook.Worksheets.Clear();
Worksheet sheet = workbook.Worksheets.Add("SalesReport");
// 写入列名
for (int col = 0; col < columnCount; col++)
{
sheet.Range[1, col + 1].Value = dataTable.Columns[col].ColumnName;
}
// 写入数据行
for (int row = 0; row < dataTable.Rows.Count; row++)
{
for (int col = 0; col < columnCount; col++)
{
sheet.Range[row + 2, col + 1].Value = dataTable.Rows[row][col].ToString();
}
}
// 保存到文件
workbook.SaveToFile("output/DataTableToExcel.xlsx", FileFormat.Version2016);
workbook.Dispose();
}
}
}
结果
本文演示如何使用C#代码在.NET程序中导入Excel文件数据到DataTable以及到处DataTable数据到Excel文件。