从Excel返回一个数据列表

本文关键字:一个 数据 列表 Excel 返回 | 更新日期: 2023-09-27 18:18:01

我在Excel中有一个数据,我写了一个方法来返回数据,但我不知道如何在列表中返回它们。下面是我的方法:

 public List<MyJoin> Excel(string sort, string sortDir, int rowsPerPage, int page, out int count, out string sortCriteria) {
        count = 0;
        sortCriteria = "";
        var book = new ExcelQueryFactory("/App_Data/Northwind.xsl");
        var result = from x in book.Worksheet("Orders")
                     select new
                     {
                         OrderID = x["OrderID"],
                         OrderDate = x["OrderDate"],
                         ShipCountry = x["ShipCountry"],
                         CompanyName = x["CustomerID"],
                         ContactName = x["CustomerID"],
                         EmployeeName = x["EmployeeID"],
                     };
       var result2 = result.ToList() ;
        return result2;
        //return new List<MyJoin>();  
    }

下面是我的类:

public class MyJoin {
    public int OrderID { get; set; }
    public DateTime OrderDate { get; set; }
    public string ShipCountry { get; set; }
    public string CompanyName { get; set; }
    public string ContactName { get; set; }
    public string EmployeeName { get; set; }
}

result2不能返回LINQ,我不知道如何修复它

从Excel返回一个数据列表

Row[columnName]返回Cell对象。并且您不能将单元格对象分配给整数/字符串/日期时间字段。您只需要使用CellCast<T>方法,并带有适当的类型参数:

var result = from r in book.Worksheet("Orders")
             select new MyJoin
             {
                 OrderID = r["OrderID"].Cast<int>(),
                 OrderDate = r["OrderDate"].Cast<DateTime>(),
                 ShipCountry = r["ShipCountry"].Cast<string>(),
                 CompanyName = r["CustomerID"].Cast<string>(),
                 ContactName = r["CustomerID"].Cast<string>(),
                 EmployeeName = r["EmployeeID"].Cast<string>()
             };

根据您的评论,您可以直接将列映射到类的属性(前提是它们都具有相同的名称),如下所示:-

 List<MyJoin> result = (from b in book.Worksheet<MyJoin>("Orders")
                       select b).ToList();

他们的方式你做它目前即x["OrderID"]是必需的,如果你没有一个类映射。x["OrderID"]返回Linq-to-Excel行对象,您必须像这样强制转换:-

x["OrderID"].Cast<int>