使用C#将Excel转为XML的两种方案
作者:咕白m625
在数据处理场景中,Excel文件常作为中间格式存在,但其结构化程度有限,若需将Excel数据导入系统、进行二次分析或与XML格式服务对接,Excel 转 XML 成为一项高频需求,所以本文给大家介绍了使用C#将Excel转为XML的两种方案,需要的朋友可以参考下
在数据处理场景中,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 -> Name
、Worksheet -> 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 等)正常解析;
两种方案适用场景
开发者可根据实际需求选择合适方案:
- 若需生成自定义格式的 XML 文件(如用于特定系统的数据交换、自定义配置文件),或需对 Excel 数据进行过滤、格式化等处理,建议选择方案一;
- 若仅需快速将 Excel 转换为标准 Open XML 格式,且无需自定义结构(如用于 Office 软件兼容、通用数据备份),建议选择方案二。
到此这篇关于使用C#将Excel转为XML的两种方案的文章就介绍到这了,更多相关C# Excel转为XML内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!