当前位置: 首页 > article >正文

.NET中通过C#实现Excel与DataTable的数据互转

在.NET框架中,使用C#进行Excel数据与DataTable之间的转换是数据分析、报表生成、数据迁移等操作中的常见需求。这一过程涉及到将Excel文件中的数据读取并加载至DataTable中,以便于利用.NET提供的丰富数据处理功能进行操作,同时也包括将DataTable中的数据导出至Excel文件,以实现数据的可视化或共享。本文将介绍如何通过C#语言实现Excel数据与DataTable之间的高效转换

文章目录

    • 将数据从DataTable导出到Excel文件
    • 将数据从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();
            }
        }
    }
}

结果
C#将Excel数据导入DataTable

将数据从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#将DataTable数据写入Excel

本文演示如何使用C#代码在.NET程序中导入Excel文件数据到DataTable以及到处DataTable数据到Excel文件。


http://www.kler.cn/a/385849.html

相关文章:

  • vue3【实战】切换全屏【组件封装】FullScreen.vue
  • 【ict基础软件赛道】真题-50%openGauss
  • 树状数组+概率论,ABC380G - Another Shuffle Window
  • hive表名重命名、rename重命名
  • 【链路层】空口数据包详解(4):数据物理通道协议数据单元(PDU)
  • reduce-scatter:适合分布式计算;Reduce、LayerNorm和Broadcast算子的执行顺序对计算结果的影响,以及它们对资源消耗的影响
  • Docker使用相关记录
  • 【PGCCC】postgresql 缓存池并发设计
  • 如何准备验厂及验厂证书有效期
  • 开源模型应用落地-glm模型小试-glm-4-9b-chat-Gradio集成(三)
  • 什么是jQuery
  • 光耦合器在现代电子学中的关键应用
  • H5播放器EasyPlayer.js 流媒体播放器是否支持npm(yarn) install 安装?
  • 设置agetty启动参数登录Linux
  • 大模型自动构建知识图谱/GraphRAG/neo4j可视化/问答系统探索
  • HTB:Perfection[WriteUP]
  • 【Ant Design Pro】框架入门的起手式及架构的分析
  • MongoDB 基础与应用
  • 如何管理PHP的API部署环境
  • iPhone 17版本的开发者权限如何开启?
  • Oracle 第29章:Oracle数据库未来展望
  • 15分钟学 Go 第 43 天:前端与Go的结合
  • qt QClipboard详解
  • # 使用VMwarWorkstation虚拟机安装Ubuntu系统
  • Obsidian之与Typora图片格式相互兼容
  • 【缓存与加速技术实践】Web缓存代理与CDN内容分发网络