创建直接表示Excel工作表的对象列表

时间:2015-04-07 02:56:58

标签: c# dynamic linq-to-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 个答案:

答案 0 :(得分: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;