Читайте Excel и сохраняйте в словарь или список в .NET Core Test проекта C #? - PullRequest
0 голосов
/ 03 октября 2019

Как я могу прочитать Excel .xlsx / .xls и сохранить в файл / словарь JSON или список в .NET Core Console / Test project C #? Oledb не поддерживается в ядре .NET.

Данные Excel:

SerialNo   Code
1233534    3456
232443435  12101
565765     66690

Ожидаемый JSON:

{
  "Items": [
    {
      "serialNo": "1233534",
      "code": "3456"
    },
    {
      "serialNo": "232443435",
      "code": "12101"
    },
    {
      "serialNo": "565765",
      "code": "66690"
    }
  ]
}  

Ответы [ 2 ]

0 голосов
/ 03 октября 2019

Я сделал пример того, как вы можете сделать это динамически.

По сути, мой пример - это консольное приложение, которое использует библиотеку EPPlus для чтения файла Excel и получает из первой строки первого листа имена свойств,затем заполняет список объектами, а затем преобразует его в Json, используя библиотеку Newtonsoft

static void Main(string[] args)
{
    var filePath = @"C:\Users\xxx\Downloads\test.xlsx";
    var fileInfo = new FileInfo(filePath);
    var package = new ExcelPackage(fileInfo);
    var worksheet = package.Workbook.Worksheets.FirstOrDefault();
    var properties = GetPropertiesFromExcelFirstLine(worksheet);
    var i = 2;
    var objectsList = new List<object>();
    while (worksheet.Cells[i, 1].Value != null && (worksheet.Cells[i, 1].Value?.ToString() != ""))
    {
        objectsList.Add(GetObjectByLineNumber(worksheet, i, properties));
        i++;
    }

    var json = JsonConvert.SerializeObject(objectsList);
}
static List<string> GetPropertiesFromExcelFirstLine(ExcelWorksheet worksheet)
{
    var list = new List<string>();
    var i = 1;
    while (worksheet.Cells[1, i].Value != null && (worksheet.Cells[1, i].Value?.ToString() != ""))
    {
        list.Add(worksheet.Cells[1, i].Value?.ToString());
        i++;
    }
    return list;
}

static ExpandoObject GetObjectByLineNumber(ExcelWorksheet worksheet, int line, List<string> objectProperties)
{
    var obj = new ExpandoObject();

    for (int i = 1; i <= objectProperties.Count; i++)
    {
        AddProperty(obj, objectProperties[i - 1], worksheet.Cells[line, i].Value?.ToString());
    }

    return obj;
}

public static void AddProperty(ExpandoObject expando, string propertyName, object propertyValue)
{
    var expandoDict = expando as IDictionary<string, object>;
    if (expandoDict.ContainsKey(propertyName))
        expandoDict[propertyName] = propertyValue;
    else
        expandoDict.Add(propertyName, propertyValue);
}
0 голосов
/ 03 октября 2019

Немного не по теме, но ... Если это поможет любому из расширений x ... в Microsoft Office, например. xlsx, docx и т. д. - это просто файлы .ZIP. Измените расширение на .zip и распакуйте его. Вы увидите структуру документа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...