使用 C# 将 Excel 转为 XML:高效、稳定、易实现

57 阅读3分钟

在数据处理场景中,Excel文件常作为中间格式存在,但其结构化程度有限。若需将Excel数据导入系统、进行二次分析或与XML格式服务对接,Excel 转 XML 成为一项高频需求。然而,传统方法往往依赖复杂脚本或第三方工具,效率低、易出错。

本文将分享一个轻量、稳定的方案:使用免费库 Free Spire.XLS for .NET ,通过 C# 代码实现 Excel 到XML 的高效转换。

优势分析

相比手动解析或使用OpenXML,Free Spire.XLS提供成熟的 .NET 封装,支持无需安装 Office 环境即可读写 Excel 文件。

对比项传统方法(如VBA)Free Spire.XLS for .NET
依赖Office✅ 需要安装❌ 无依赖
开发效率⭐⭐⭐⭐⭐⭐
转换稳定性⚠️ 易出错✅ 高度可靠
适用场景小型脚本轻量级

需注意免费版虽无任何水印,但是有一定页数限制。

方案一:手动构建 XML 结构(灵活可控)

以下代码通过手动遍历 Excel 单元格、构建 XML 节点的方式,实现数据从 Excel 到 XML 的转换:

using System.Xml;
using Spire.Xls;

class ExcelToXmlConverter
{
    static void Main(string[] args)
    {
        // 创建Workbook对象
        Workbook wb = new Workbook();

        // 加载Excel文件
        wb.LoadFromFile("data.xlsx");

        // 获取第一个工作表
        Worksheet ws = wb.Worksheets[0];

        // 获取已使用的区域
        CellRange usedRange = ws.AllocatedRange;

        // 创建XML文档
        XmlDocument xmlDoc = new XmlDocument();
        XmlDeclaration xmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0""utf-8"null);
        xmlDoc.AppendChild(xmlDeclaration);

        // 创建根元素
        XmlElement root = xmlDoc.CreateElement("Worksheet");
        xmlDoc.AppendChild(root);

        // 设置工作表名称
        XmlElement nameElement = xmlDoc.CreateElement("Name");
        nameElement.InnerText = ws.Name;
        root.AppendChild(nameElement);

        // 遍历已使用的区域(行)
        for (int i = 0; i < usedRange.Rows.Length; i++)
        {
            XmlElement rowElement = xmlDoc.CreateElement("Row");
            root.AppendChild(rowElement);

            // 遍历列
            for (int j = 0; j < usedRange.Columns.Length; j++)
            {
                // 获取单元格的值
                object cellValue = usedRange[i+1, j+1].Value;

                // 创建单元格元素
                XmlElement cellElement = xmlDoc.CreateElement("Cell");
                rowElement.AppendChild(cellElement);

                // 创建数据元素
                XmlElement dataElement = xmlDoc.CreateElement("Data");
                dataElement.InnerText = cellValue?.ToString() ?? string.Empty;
                cellElement.AppendChild(dataElement);
            }
        }

        // 保存XML文件
        xmlDoc.Save("工作表写入XML.xml");

        // 释放资源
        wb.Dispose();
    }
}

该方案的核心优势在于高度灵活可控,开发者可根据需求自定义 XML 的结构与节点命名:

  • 节点自定义:可自由修改根节点(如将 <Worksheet> 改为 <ExcelData> )、行节点(<Row>)、单元格节点(<Cell>)的名称,满足不同场景下的 XML 格式要求;
  • 结构可视化:通过手动创建节点,开发者能清晰掌控 XML 的层级关系(如 Worksheet -> NameWorksheet -> Row -> Cell -> Data),便于后续 XML 文件的解析与使用。

方案二:调用内置方法(简洁高效

Free Spire.XLS 组件提供了 SaveAsXml 方法,无需手动构建 XML 结构即可实现 Excel 到 XML 的快速转换,代码如下:

using Spire.Xls;

namespace ExcelToXML
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //Load an Excel file
            Workbook workbook = new Workbook();
            workbook.LoadFromFile("Sample.xlsx");

            // Save the Excel file in Open XML file format
            workbook.SaveAsXml("ExcelToXML.xml");
        }
    }
}

该方案的最大优势在于简洁高效,通过封装好的 API 大幅简化开发流程:

  • 代码极简:仅需 3 行核心代码,即可完成转换,降低开发难度与代码维护成本;
  • 遵循标准格式SaveAsXml 方法生成的 XML 文件严格遵循Open XML 规范(微软定义的开放式文档格式标准),确保文件的兼容性,可被其他支持 Open XML 的软件(如 Office、Apache POI 等)正常解析;

两种方案适用场景

开发者可根据实际需求选择合适方案:

  1. 若需生成自定义格式的 XML 文件(如用于特定系统的数据交换、自定义配置文件),或需对 Excel 数据进行过滤、格式化等处理,建议选择方案一
  2. 若仅需快速将 Excel 转换为标准 Open XML 格式,且无需自定义结构(如用于 Office 软件兼容、通用数据备份),建议选择方案二