【问题标题】:How to convert .json file to excel in c#如何在c#中将.json文件转换为excel
【发布时间】:2014-10-31 17:50:34
【问题描述】:

我想将 .json 文件转换为 excel 。我无法使用 c# 语言在任何地方找到这些问题的解决方案。 任何人都可以帮助我解决这些问题以及确切的解决方案。

【问题讨论】:

  • 首先使用库 (JSON.NET) 反序列化您的 json,然后迭代您的数据并创建 excel 行。 msdn.microsoft.com/en-us/library/ms173186(v=vs.80).aspx如果您有任何问题在这里发布代码,我们将提供帮助
  • @GeorgeVovos 使用互操作是有问题的(需要安装 Office,并且由于许可而不能在网页上使用),好的替代方案是 OpenXML 或其包装器 - ClosedXML
  • PTwr 是对的。做的时候不要用interop。我之前也遇到过问题
  • 非常感谢。我会按照你们所说的那样尝试这些程序。

标签: c#-4.0


【解决方案1】:

这是另一个部分解决方案,不需要定义 json,只要 json 是表格格式。

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

从这里,您可以使用互联网上提供的众多数据表中的任何一种 -> excel 解决方案。

很多张贴在这里: How to export DataTable to Excel

【讨论】:

    【解决方案2】:

    这取决于数据以及您想要在 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());
    

    【讨论】:

    • 嗨 Krisc,在“sb.AppendLine(o.foo);”中出现错误“'System.Text.StringBuilder.AppendLine(string)' 的最佳重载方法匹配有一些无效参数“你能检查一下这些有什么问题吗?谢谢
    • 您必须将代码粘贴到某处,因为它正在为我编译 :( 抱歉!
    • 听起来您只需要在将动态添加到阅读器之前将其转换为字符串。
    【解决方案3】:

    可以在EPPlus的帮助下完成,查看下面的代码以获得完整的答案。

    1. 创建 Json 数据并将其写入 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. 通过读取 Json 键值对创建 C# 对象

      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;
      }
      

    【讨论】:

      猜你喜欢
      • 2020-01-19
      • 1970-01-01
      • 2016-12-18
      • 2015-04-01
      • 2023-02-14
      • 2015-08-09
      • 1970-01-01
      • 2023-01-19
      相关资源
      最近更新 更多