当前位置: 代码网 > it编程>编程语言>C# > C#实现Excel与DataTable的数据互转的代码示例

C#实现Excel与DataTable的数据互转的代码示例

2024年11月25日 C# 我要评论
引言在.net框架中,使用c#进行excel数据与datatable之间的转换是数据分析、报表生成、数据迁移等操作中的常见需求。这一过程涉及到将excel文件中的数据读取并加载至datatable中,

引言

在.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对象中。以下是操作步骤:

  1. 导入所需模块。
  2. 创建workbook对象,使用workbook.loadfromfile()方法载入excel文件。
  3. 使用workbook.worksheets[]属性获取需要的工作表。
  4. 创建datatable实例。
  5. 遍历工作表第一行数据,使用worksheet.allocatedrange[].value属性获取其中单元格的值,最后使用datatable.columns.add()方法将其导入为datatable的列名。
  6. 遍历剩余各行,使用同样的方法获取单元格数据,并写入到datatable各行中。
  7. 输出结果。

代码示例

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文件中。以下是操作步骤:

  1. 导入所需模块。
  2. 定义数据并使用数据构建datatable对象。
  3. 创建workbook实例。
  4. 使用workbook.worksheets.clear()方法清除默认工作表,然后使用workbook.worksheets.add()方法新建工作表。
  5. 遍历datatable列,使用datatable.columns[].columnname属性获取列名,最后使用worksheet.range[].value属性将列名写入工作表。
  6. 遍历datatable数据行和列,使用datatable.rows[][].tostring()方法获取数据为字符串,最后使用worksheet.range[].value属性将数据写入工作表。
  7. 使用workbook.savetofile()方法保存excel文件。
  8. 释放资源。

代码示例

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数据互转内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com