如何遍历Json.NET的List<Dictionary<string,object>>并使用EPPUS导出Excel文件
反序列化结果转Excel实现方案
你已经完成了JSON到List<Dictionary<string, object>>的反序列化,后续转换Excel可按以下两步实现:
1. 提取所有唯一字段作为表头
遍历所有字典的键去重,得到完整的表头列表,避免部分字典缺字段导致表头不全:
var allHeaders = resposneJson1 .SelectMany(d => d.Keys) .Distinct() .ToList();
2. 填充数据生成Excel
这里提供常用的EPPlus实现方案(非商用场景可免费使用):
- 首先安装NuGet包:
EPPlus - 完整实现代码:
using OfficeOpenXml; using System.IO; // EPPlus 5及以上版本需要指定证书上下文,非商用场景设置为NonCommercial ExcelPackage.LicenseContext = LicenseContext.NonCommercial; using(var excelPackage = new ExcelPackage()) { // 创建工作表 var sheet = excelPackage.Workbook.Worksheets.Add("导出数据"); // 写入表头(第一行) for(int col = 0; col < allHeaders.Count; col++) { sheet.Cells[1, col + 1].Value = allHeaders[col]; sheet.Cells[1, col + 1].Style.Font.Bold = true; } // 逐行写入数据(从第二行开始) for(int row = 0; row < resposneJson1.Count; row++) { var currentData = resposneJson1[row]; for(int col = 0; col < allHeaders.Count; col++) { // 字典存在对应字段则取值,不存在填空 sheet.Cells[row + 2, col + 1].Value = currentData.TryGetValue(allHeaders[col], out var val) ? val : ""; } } // 自动适配列宽 sheet.Cells.AutoFitColumns(); // 保存到本地,也可以转为byte[]返回给前端实现下载 File.WriteAllBytes(@"D:\数据导出.xlsx", excelPackage.GetAsByteArray()); }
如果是商用场景,建议使用无许可限制的NPOI库实现,核心逻辑和上述完全一致,仅操作Excel的API不同。
内容的提问来源于stack exchange,提问作者ararb78
相关产品推荐
相关产品推荐

