使用c#结合xmldocument和epplus可高效将xml数据导出到excel。首先通过nuget安装epplus库,然后加载xml文件并解析record节点,提取name、age、city等字段存入字典列表,接着创建excel工作表,写入表头和数据行,最后自动调整列宽并保存文件。该方法适用于配置导入、报表生成等场景,支持utf-8中文内容,建议对大型文件使用xmlreader流式读取以提升性能。

在.NET开发中,处理XML数据并将其导出到Excel是常见的业务需求,比如配置导入、报表生成等场景。C#结合 System.Xml 和 EPPlus 或 NPOI 可以高效完成这一任务。以下是一个实用、结构清晰的代码片段,帮助你快速实现从XML读取到Excel写入的流程。
1. 准备工作:引入必要的库
推荐使用 EPPlus(支持 .NET 6+),它操作 Excel (.xlsx) 文件简单高效。
通过 NuGet 安装:- Install-Package EPPlus
确保你的项目启用非安全代码或处理 COM 的权限(如果使用 Microsoft.Office.Interop,则不推荐用于服务端)。
2. 示例 XML 结构
假设有一个名为 data.xml 的文件:
<?xml version="1.0" encoding="utf-8"?>
<Records>
<Record>
<Name>张三</Name>
<Age>28</Age>
<City>北京</City>
</Record>
<Record>
<Name>李四</Name>
<Age>32</Age>
<City>上海</City>
</Record>
</Records>
3. 使用 XmlDocument 高效读取 XML
XmlDocument 适合结构清晰的小到中型 XML 文件,易于遍历节点。
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml;
using OfficeOpenXml; // EPPlus
class Program
{
static void Main()
{
string xmlPath = "data.xml";
string excelPath = "output.xlsx";
var records = new List<Dictionary<string, string>>();
XmlDocument doc = new XmlDocument();
doc.Load(xmlPath);
XmlNodeList recordNodes = doc.SelectNodes("//Record");
foreach (XmlNode node in recordNodes)
{
var record = new Dictionary<string, string>();
record["Name"] = node["Name"]?.InnerText ?? "";
record["Age"] = node["Age"]?.InnerText ?? "";
record["City"] = node["City"]?.InnerText ?? "";
records.Add(record);
}
WriteToExcel(records, excelPath);
Console.WriteLine("数据已成功写入 Excel:" + excelPath);
}
}
4. 使用 EPPlus 写入 Excel
将读取的数据写入 Excel 表格,首行为列标题。
static void WriteToExcel(List<Dictionary<string, string>> data, string filePath)
{
if (data.Count == 0) return;
ExcelPackage.LicenseContext = LicenseContext.NonCommercial; // 免费使用
using (var package = new ExcelPackage())
{
var worksheet = package.Workbook.Worksheets.Add("数据表");
// 写入表头
var headers = data[0].Keys;
int col = 1;
foreach (var header in headers)
{
worksheet.Cells[1, col].Value = header;
col++;
}
// 写入数据行
int row = 2;
foreach (var record in data)
{
col = 1;
foreach (var key in headers)
{
worksheet.Cells[row, col].Value = record[key];
col++;
}
row++;
}
// 自动调整列宽
worksheet.Cells.AutoFitColumns();
// 保存文件
FileInfo file = new FileInfo(filePath);
package.SaveAs(file);
}
}
5. 进阶建议
- 对于大型 XML 文件,考虑使用 XmlReader 流式读取,避免内存溢出。
- 添加异常处理(如文件不存在、格式错误)提升健壮性。
- 若需样式控制(字体、边框),EPPlus 支持详细格式设置。
- 支持中文路径和内容时,确保文件编码一致(UTF-8)。
基本上就这些。这套组合拳适用于大多数数据迁移、报表导出场景,代码简洁且性能良好。










