【.NET 开发】通过 C# 实现 Excel 转 JSON

在 .NET 开发中,Excel 与 JSON 的格式转换是数据交互的高频需求。Excel 适合人工编辑与可视化展示,JSON 则是跨平台 API 通信、系统集成的标准格式。本文将详细讲解如何使用免费 .NET 库快速实现 Excel 到 JSON 的自动化转换,无需依赖 Microsoft Office,附完整代码与场景扩展。

文章目录

    • 一、环境准备
      • [1. 安装免费 .NET 库](#1. 安装免费 .NET 库)
      • [2. 额外依赖](#2. 额外依赖)
    • [二、Excel 转 JSON 完整实现(C# 示例)](# 示例))
      • [1. 需求场景说明](#1. 需求场景说明)
      • [2. 完整代码实现](#2. 完整代码实现)
      • [3. 转换结果示例](#3. 转换结果示例)
    • [三、核心 API 与参数解析](#三、核心 API 与参数解析)
      • [1. Workbook 核心方法](#1. Workbook 核心方法)
      • [2. ExportDataTable 参数说明](#2. ExportDataTable 参数说明)
      • [3. JSON 序列化配置优化](#3. JSON 序列化配置优化)
    • 四、扩展:多工作表批量转换

一、环境准备

1. 安装免费 .NET 库

Free Spire.XLS for .NET 是一款轻量级的 Excel 处理库,可通过NuGet 快速安装,两种方式任选:

  • 方式1:NuGet包管理器界面
    右键项目 → 「管理NuGet程序包」→ 搜索「FreeSpire.XLS」→ 点击「安装」

  • 方式2:Package Manager Console 命令
    打开控制台,输入以下命令并回车:

    复制代码
    Install-Package FreeSpire.XLS

    注意免费版限制,适用于小型项目。

2. 额外依赖

JSON 序列化需借助 Newtonsoft.Json(Json.NET,同样通过NuGet 安装:

复制代码
Install-Package Newtonsoft.Json

二、Excel 转 JSON 完整实现(C# 示例)

1. 需求场景说明

假设我们有一个用户信息 Excel 文件(UserData.xlsx),结构如下:

目标:读取该 Excel 数据,转换为结构化 JSON,保留数据类型一致性。

2. 完整代码实现

csharp 复制代码
using System;
using System.Data;
using Newtonsoft.Json;
using Spire.Xls;

namespace ExcelToJsonDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                // 1. 加载Excel文件
                string excelFilePath = "UserData.xlsx";
                Workbook workbook = new Workbook();
                workbook.LoadFromFile(excelFilePath); // 无需Office依赖,直接加载文件

                // 2. 指定目标工作表(按索引或名称选择)
                Worksheet worksheet = workbook.Worksheets[0]; // 第一个工作表(索引从0开始)

                // 3. 将工作表数据导出为DataTable(核心步骤)
                DataTable dataTable = worksheet.ExportDataTable();

                // 4. 自定义JSON序列化配置(优化格式与数据类型)
                JsonSerializerSettings settings = new JsonSerializerSettings
                {
                    Formatting = Formatting.Indented, // 格式化输出(换行+缩进)
                    DateFormatString = "yyyy-MM-dd", // 日期格式统一
                    NullValueHandling = NullValueHandling.Ignore // 忽略空值字段
                };

                // 5. 将DataTable序列化为JSON字符串
                string jsonResult = JsonConvert.SerializeObject(dataTable, settings);

                // 6. 保存JSON文件(或直接用于API传输)
                string jsonFilePath = @"E:\Files\UserData.json";
                System.IO.File.WriteAllText(jsonFilePath, jsonResult, System.Text.Encoding.UTF8);

                Console.WriteLine("Excel转JSON成功!JSON文件路径:" + jsonFilePath);
            }
            catch (Exception ex)
            {
                Console.WriteLine("转换失败:" + ex.Message);
            }
        }
    }
}

3. 转换结果示例

生成的 UserData.json 文件内容如下,数据类型与 Excel 保持一致:


三、核心 API 与参数解析

1. Workbook 核心方法

  • LoadFromFile(string filePath):加载 Excel 文件,自动识别 .xls/.xlsx格式
  • Worksheets[index]:获取工作表集合,索引从0开始

2. ExportDataTable 参数说明

  • Worksheet.ExportDataTable(): 将指定工作表导出为 DataTable。该方法提供了多组重载,适配不同的导出需求,具体参考其 API 说明

3. JSON 序列化配置优化

  • Formatting.Indented:生成可读性强的格式化 JSON,便于调试
  • DateFormatString:统一日期格式(避免默认的 ISO 格式适配问题)
  • NullValueHandling.Ignore:过滤空值字段,精简 JSON 体积

四、扩展:多工作表批量转换

若 Excel 包含多个工作表,可通过遍历 Worksheets 集合实现批量转换:

csharp 复制代码
foreach (Worksheet sheet in workbook.Worksheets)
{
    if (sheet.Visibility == WorksheetVisibility.Hidden) // 只处理可见工作表
    {
        DataTable dt = sheet.ExportDataTable();
        string json = JsonConvert.SerializeObject(dt, settings);
        // 按工作表名称保存JSON文件
        System.IO.File.WriteAllText($@"E:\{sheet.Name}.json", json);
    }
}

以上示例演示了如何通过 C# 将 Excel 转换为 JSON,无需依赖 Office 环境,代码简洁高效,适合各类.NET项目的数据交互场景。核心流程可概括为:加载 Excel 文件 → 读取工作表 → 导出 DataTable → JSON 序列化 → 保存/传输,全程仅需5步即可完成。

通过本文的步骤指导与代码示例,开发者可快速集成该功能,同时支持多工作表、特殊数据类型、空值处理等复杂场景,大幅提升数据转换效率。

相关推荐
fs哆哆2 小时前
在VB.NET和VBA教程-操作Excel单元格的三个核心问题
ui·.net·excel
王维志11 小时前
使用C#控制台批量删除 Unity目录里的 .meta文件
unity·c#·.net
de之梦-御风12 小时前
【C#.Net】C#开发的未来前景
开发语言·c#·.net
de之梦-御风12 小时前
【C#.Net】C#在工业领域的具体应用场景
开发语言·c#·.net
wuk99815 小时前
基于C#与三菱PLC通过TCPIP实现MC协议通信示例
java·网络·c#
avi911115 小时前
Unity 天命6源码- 商业游戏说明分析
开发语言·unity·c#·游戏开发·游戏源码
Aevget16 小时前
DevExpress WinForms v25.2亮点 - 支持.NET 10 & VS 2026
.net·界面控件·devexpress·ui开发·winforms·vs 2026
weixin_4569042716 小时前
在 .NET Framework 4.0 中实现方法超时控制
网络·.net
hhzz16 小时前
EasyPoi的核心映射工具:@Excel注解详解
java·服务器·excel·springboot·easypoi