【.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步即可完成。

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

相关推荐
啦啦啦_999923 分钟前
Redis-5-doFormatAsync()方法
数据库·redis·c#
Porco.w1 小时前
C#与三菱PLC FX5U通信
网络·c#
E_ICEBLUE3 小时前
PPT 批量转图片:在 Web 预览中实现翻页效果(C#/VB.NET)
c#·powerpoint·svg
JQLvopkk4 小时前
C# 轻量级工业温湿度监控系统(含数据库与源码)
开发语言·数据库·c#
wxin_VXbishe7 小时前
C#(asp.net)学员竞赛信息管理系统-计算机毕业设计源码28790
java·vue.js·spring boot·spring·django·c#·php
qq_297574679 小时前
【实战】POI 实现 Excel 多级表头导出(含合并单元格完整方案)
java·spring boot·后端·excel
bugcome_com19 小时前
零基础入门C#:一篇搞懂核心知识点
c#
程序员敲代码吗1 天前
如何通过命令行启动COMSOL的参数化、批处理和集群扫描
java·c#·bash
缺点内向1 天前
C#: 告别繁琐!轻松移除Word文档中的文本与图片水印
c#·自动化·word·.net
喵叔哟1 天前
06-ASPNETCore-WebAPI开发
服务器·后端·c#