【问题标题】:Create a list of objects that directly represents an Excel sheet创建直接表示 Excel 工作表的对象列表
【发布时间】:2015-09-02 06:50:36
【问题描述】:

使用 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(); 

【问题讨论】:

    标签: c# dynamic linq-to-excel


    【解决方案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&lt;&gt;() 方法轻松转换单元格的值

    var excel = new ExcelQueryFactory("excelFileName");
    var largeCompanies = from c in excel.Worksheet()
                         where c["EmployeeCount"].Cast<int>() > 500
                         select c;
    

    【讨论】:

    • 我不知道 Excel 行的名称,见 OP
    猜你喜欢
    • 2018-05-13
    • 1970-01-01
    • 2016-05-26
    • 2018-10-26
    • 2012-07-10
    • 2017-06-26
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多