如何在C#中将.json文件转换为Excel

13

我想将 .json 文件转换为 Excel 表格,但使用 C# 语言无法找到解决方案。有人能够帮我提供确切的解决方案吗?


首先使用库(JSON.NET)反序列化您的JSON,然后迭代数据并创建Excel行。 http://msdn.microsoft.com/en-us/library/ms173186(v=vs.80).aspx如果您有任何问题,请在此处发布代码,我们将帮助您。 - George Vovos
2
@GeorgeVovos 使用Interop存在问题(需要安装Office并且由于许可证无法在网页上使用),一个好的替代方案是OpenXML或其包装器 - [ClosedXML](https://closedxml.codeplex.com/)。 - PTwr
PTwr是正确的。当你做这件事时,不要使用Interop。我以前也遇到过麻烦。 - George Vovos
非常感谢。我会按照你们说的尝试这些步骤。 - user3628181
4个回答

14

这里是另一种部分解决方案,不需要制作json定义,只要保证json格式为表格即可。

DataTable dt = (DataTable)JsonConvert.DeserializeObject(json, (typeof(DataTable)));

你可以在互联网上使用众多的datatable -> excel解决方案之一。

这里有很多解决方案: 如何将DataTable导出为Excel


4

这取决于数据和您在Excel方面想要实现的目标。我建议使用Json.NET并输出到CSV文件中,该文件可以在Excel中打开。

考虑以下JSON……一个简单的数组

[{
    "foo": "bar"
}]

使用Json.NET,我们可以通过以下方式将其转换为C#。
var jsonData = "[{ \"foo\": \"bar\" }]";

var jsonDefinition = new object[]
{
    new {foo = ""}
};

var result = JsonConvert.DeserializeAnonymousType(jsonData, jsonDefinition);

我们可以遍历这个结构,将其输出到一个CSV文件中。
var sb = new StringBuilder();
foreach (dynamic o in result)
{
    sb.AppendLine(o.foo);
}
File.WriteAllText(@"c:\code\test.csv", sb.ToString());

1
嗨Krisc,我在“sb.AppendLine(o.foo);”中遇到了一个错误:“System.Text.StringBuilder.AppendLine(string)的最佳重载方法匹配有一些无效参数”,你能检查一下这个问题是什么吗?谢谢。 - user3628181
你需要在代码编译时把它复制到某个地方给我看 :( 很抱歉! - Krisc
听起来你只需要在将其添加到读取器之前将动态转换为字符串。 - Anthony Mason

2
我使用了ExcelMapper。这个应用很棒,因为我只需要发送一个C#列表给它,ExcelMapper就会将其转换成Excel表格。哇!它可以通过Nuget管理器获取。
ExcelMapper em = new ExcelMapper();
        em.Save(stExportFileFullPath, items, "Totals", true); 

items是一个由以下类和字段组成的列表。

public class CarrierRevenueLOBReport {

    public int Year { get; set; }
    public int Month { get; set; }       
    public string Carrier { get; set; }
    public string LOBName { get; set; }
    public string NewOrRenewal { get; set; }
    public double SumPremium { get; set; }
    public double SumCommision { get; set; }
 }
    

*/


1
可以借助EPPlus完成,查看下方代码获取完整答案。
  1. Create And write Json Data to Excel

                using (StreamReader r = new StreamReader(file))
                {
                    string json = r.ReadToEnd();
                    var obj = JsonConvert.DeserializeObject<JObject>(json);
    
                    List<JsonData> dataList = GetDataList(obj);
    
                    var fileName = file.Split('\\').Last().Split('.')[0].Trim().ToString();
    
                    using (ExcelPackage excel = new ExcelPackage())
                    {
                        excel.Workbook.Worksheets.Add(fileName);
    
                        var headerRow = new List<string[]>()
                            {
                                    new string[] { "Key", "Value"}
                                };
    
                        string headerRange = "A1:" + Char.ConvertFromUtf32(headerRow[0].Length + 64) + "1";
    
                        var worksheet = excel.Workbook.Worksheets[fileName];
    
                        worksheet.Cells[headerRange].LoadFromArrays(headerRow);
    
                        worksheet.Cells[2, 1].LoadFromCollection(dataList);
    
                        FileInfo excelFile = new FileInfo($"D:\\JsonFilesToExcel\\{folder}\\{fileName}.xlsx");
                        excel.SaveAs(excelFile);
                    }
    
                }
    
  2. Create C# Object from Reading Json Key Value pairs

    public static List<JsonData> GetDataList(JObject obj)
    {
        var listResult = new List<JsonData>();
    
        foreach (JProperty item in (JToken)obj)
        {
            listResult.Add(new JsonData { Key = item.Name, Value = item.Value.ToString() });
        }
        return listResult;
    }
    

这是一个付费插件,每年大约需要花费379美元。 - Enrico

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接