Создайте список объектов, который непосредственно представляет лист Excel
Используя 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();
1 ответ
Вы хотите использовать класс 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;