C# 使用LightweightExcelReader将Excel转换为JSON

C# 使用LightweightExcelReader将Excel转换为JSON,c#,json,excel,C#,Json,Excel,我有一个Excel文件(.xlsx)和一张工作表,如下所示: Name | Age | Country | Nik 17 Switzerland Thomas 28 Kuba Waslim 12 Russia [ { "Name":"Nik", "Age":17, "Country":"

我有一个Excel文件(.xlsx)和一张工作表,如下所示:

Name     | Age | Country      |
Nik        17    Switzerland
Thomas     28    Kuba
Waslim     12    Russia
[
    {
        "Name":"Nik",
        "Age":17,
        "Country":"Switzerland"
    },
    {
        "Name":"Thomas",
        "Age":28,
        "Country":"Kuba"
    },
    {
        "Name":"Waslim",
        "Age":12,
        "Country":"Russia"
    }
]

我想将此excel工作表转换为JSON格式

结果应该如下所示:

Name     | Age | Country      |
Nik        17    Switzerland
Thomas     28    Kuba
Waslim     12    Russia
[
    {
        "Name":"Nik",
        "Age":17,
        "Country":"Switzerland"
    },
    {
        "Name":"Thomas",
        "Age":28,
        "Country":"Kuba"
    },
    {
        "Name":"Waslim",
        "Age":12,
        "Country":"Russia"
    }
]
我想使用这个框架。我知道有一个问题已经问过了,但答案是使用OLEDB,这不应该是最好的做法了。我想用一个更简单、更快的框架来解决这个转换

重要: 行数和列数是动态的,可以变化,但excel工作表的格式在不同工作表之间保持不变

这是我的尝试。正如你所看到的,我没有管理太多,这是非常基本的。我成功地获得了JSON中键的第一行:

var excelReader = new ExcelReader(@"path\to\file\test.xlsx");
var sheetReader = excelReader[0];

IEnumerable<object> keys = sheetReader.Row(1);
var excelReader=new excelReader(@“path\to\file\test.xlsx”);
var sheetReader=excelReader[0];
IEnumerable keys=sheetReader.Row(1);

如何使用LightweightExcelReader框架将Excel工作表转换为JSON格式?

LightweightExcelReader在其github自述文件上的状态

如果要将电子表格映射到对象集合,请使用我们的姐妹项目ExcelToEnumerable

他们姐妹项目的示例看起来非常像您要实现的目标。


如果您不介意依赖Newtonsoft JSON,您可以执行以下操作:

公共静态类ExcelJsonExtensionMethods
{
公共静态字符串ToJson(此SheetReader SheetReader)
{
IDictionary HeaderNames=GetHeaderNames(读表器);
var jArray=新的jArray();
while(sheetReader.ReadNext())
{
var jObject=new jObject();
做
{
var propertyName=HeaderNames[新的CellRef(sheetReader.Address).ColumnNumber];
jObject[propertyName]=sheetReader.Value?.ToString();
}while(sheetReader.ReadNextInRow());
jArray.Add(jObject);
}
返回jArray.ToString();
}
专用静态IDictionary GetHeaderNames(SheetReader SheetReader)
{
var headerNames=新字典();
while(sheetReader.ReadNextInRow())
{
headerNames.Add(新的CellRef(sheetReader.Address).ColumnNumber,sheetReader.Value?.ToString());
}
返回头部;
}
}
像这样使用它:

var excelReader=new excelReader(@“path\to\file\test.xlsx”);
var sheetReader=excelReader[0];
var sheetJson=sheetReader.ToJson();
请记住,要使本规范发挥作用:

  • 标题必须位于第一行
  • 标头名称必须是有效的JSON属性名称
  • 您不能有重复的标题名称
  • 标题中不能有任何空白列

ExcelToEnumerable框架的问题是,行和列不能是动态的,必须始终相同。这是我必须具备的标准。在ExcelToEnumerable中,必须定义一个类,然后将excel映射到该类。因此,键的数量(名称、年龄、Coutry和可能更多)不能改变,因为类中总是有相同的字段。请纠正我,如果它仍然是一个可能性。