引言
在.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各行中。 - 输出结果。
代码示例
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文件。 - 释放资源。
代码示例
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文件。
到此这篇关于c#实现excel与datatable的数据互转的代码示例的文章就介绍到这了,更多相关c# excel与datatable数据互转内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论