Создайте список объектов, который непосредственно представляет лист Excel

1

Используя LinqToExcel, я пытаюсь создать динамический список объектов с динамическим числом свойств (со значениями). По сути, список объектов должен непосредственно представлять содержимое листа Excel. Однако я не знаю заголовков заголовков или столбцов номера перед раздачей.

Код ниже не работает, он даже не компилируется, но я надеюсь, что он покажет, что я пытаюсь сделать. Также отсутствует способ циклического и добавить правильное количество свойств. Имена и количество свойств должны быть получены из массива столбцов columnNameList.

    // get the records
    var excel = new ExcelQueryFactory(path);
    IEnumerable<string> columnNameList = excel.GetColumnNames(mod.SelectedSheet);
    var ExpandoObject = (from x in excel.Worksheet(selectedSheet)
                          select new ExpandoObject()
                          {
                              ExpandoObject.Prop1 = x["excelCol1"],
                              ExpandoObject.Prop2 = x["excelCol2"],
                              ExpandoObject.Prop3 = x["excelCol3"],
                              ExpandoObject.Prop4 = x["excelCol4"],
                              ExpandoObject.Prop5 = DateTime.Now
                          }).ToList(); 
Теги:
dynamic
linq-to-excel

1 ответ

2
Лучший ответ

Вы хотите использовать класс LinqToExcel.Row. Вот раздел из документации, в которой говорится, как ее использовать:

Использование класса LinqToExcel.Row

Результаты запроса могут быть возвращены как объекты LinqToExcel.Row, которые позволяют вам получить доступ к значению ячейки, используя имя столбца в индексе строки. Просто используйте метод Worksheet() без общего аргумента.

var excel = new ExcelQueryFactory("excelFileName");
var indianaCompanies = from c in excel.Worksheet()
                       where c["State"] == "IN" || c["Zip"] == "46550"
                       select c;

Класс LinqToExcel.Row позволяет легко отличить значение ячейки с помощью метода Cast<>()

var excel = new ExcelQueryFactory("excelFileName");
var largeCompanies = from c in excel.Worksheet()
                     where c["EmployeeCount"].Cast<int>() > 500
                     select c;
  • 0
    Я не знаю названия строк в Excel, прежде чем вручную увидеть OP
  • 0
    Неважно. Это сработало отлично.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню