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

 更新时间:2024年11月11日 10:12:46   作者:Eiceblue  
在.NET框架中,使用C#进行Excel数据与DataTable之间的转换是数据分析、报表生成、数据迁移等操作中的常见需求,这一过程涉及到将Excel文件中的数据读取并加载至DataTable中,本文将介绍如何通过C#语言实现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数据互转内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#中字符串分割的多种方式

    C#中字符串分割的多种方式

    在C#编程语言中,字符串处理是日常开发中不可或缺的一部分,字符串分割是处理文本数据时常用的操作,它允许我们将一个长字符串分解成多个子字符串,本文给大家介绍了C#中字符串分割的多种方式,需要的朋友可以参考下
    2025-01-01
  • C#使用Region对图形区域构造和填充的方法

    C#使用Region对图形区域构造和填充的方法

    这篇文章主要介绍了C#使用Region对图形区域构造和填充的方法,实例分析了Region类图形操作的相关技巧,需要的朋友可以参考下
    2015-06-06
  • 一文带你吃透C#中面向对象的相关知识

    一文带你吃透C#中面向对象的相关知识

    这篇文章主要为大家详细介绍了C#中面向对象的相关知识,文中的示例代码讲解详细,对我们学习C#有一定的帮助,需要的小伙伴可以参考一下
    2023-02-02
  • C#程序如何调用C++ dll详细教程

    C#程序如何调用C++ dll详细教程

    C#和C++形成的DLL有一层天然的屏障,并不能简单地互相调用,想要C#工程调用c++dll,需要先在其外部包裹上clr c++的外壳,本篇文章给大家分享了C#调用C++ dll的详细步骤和方法,有兴趣的朋友可以参考学习下
    2018-07-07
  • WPF利用DrawingContext实现绘制温度计

    WPF利用DrawingContext实现绘制温度计

    这篇文章主要为大家详细介绍了如何利用WPF和DrawingContext实现绘制温度计,文中的示例代码讲解详细,对我们学习或工作有一定帮助,感兴趣的小伙伴可以了解一下
    2022-09-09
  • C#引用类型和值类型的适用场合和区别

    C#引用类型和值类型的适用场合和区别

    今天小编就为大家分享一篇关于C#引用类型和值类型的适用场合和区别,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • C#实现Json文件读写的方法代码

    C#实现Json文件读写的方法代码

    这篇文章主要给大家介绍了关于C#实现Json文件读写的相关资料,C# 读取JSON文件并读取某一个关键字的值可以使用Newtonsoft.Json库,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • C#获取文件相关信息的方法

    C#获取文件相关信息的方法

    这篇文章主要介绍了C#获取文件相关信息的方法,涉及C#中FileInfo类的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • c#多线程之间的排他锁的实现

    c#多线程之间的排他锁的实现

    我们很多时候会碰到这样的问题,使用多线程刷一个表的数据时需要多个线程不能重复提取数据,那么这个时候就需要使用到线程的排他锁了,本文就详细的介绍一下
    2021-08-08
  • C#实现人脸识别超简单方法举例

    C#实现人脸识别超简单方法举例

    这篇文章主要给大家介绍了关于C#实现人脸识别的相关资料,文中讲解了在C#中使用EmguCV库进行人脸识别的简单示例,包括安装EmguCV库、准备训练数据、编写代码和运行程序,需要的朋友可以参考下
    2024-11-11

最新评论