LinqToExcel - 需要从特定行开始

时间:2012-08-31 16:42:00

标签: linq linq-to-excel

我正在使用LinqToExcel library。到目前为止工作得很好,除了我需要启动特定行的查询。这是因为来自客户端的excel电子表格在数据实际开始之前使用excel文件顶部的一些图像和“标题”信息。

数据本身易于阅读并且相当通用,我只需要知道如何告诉ExcelQueryFactory从特定行开始。

我知道WorksheetRange<Company>("B3", "G10")选项,但我不想指定结束行,只是开始读取文件的位置。

使用最新版本的LinqToExcel与C#

5 个答案:

答案 0 :(得分:4)

我想你已经解决了这个问题,但也许对其他人来说 - 看起来你可以使用

var excel = new ExcelQueryFactory(path);
var allRows = excel.WorksheetNoHeader();

//start from 3rd row (zero-based indexing), length = allRows.Count() or computed range of rows you want
for (int i = 2; i < length; i++)
{
    RowNoHeader row = allRows.ElementAtOrDefault(i);
    //process the row - access columns as you want - also zero-based indexing
}

不像指定一些范围(“B3”,...)那样简单,但也是方式。 希望这至少对某人有帮助;)

答案 1 :(得分:3)

我刚尝试了这段代码,它似乎工作正常:

var book = new LinqToExcel.ExcelQueryFactory(@"E:\Temporary\Book1.xlsx");

var query =
    from row in book.WorksheetRange("A4", "B16384")
    select new
    {
        Name = row["Name"].Cast<string>(),
        Age = row["Age"].Cast<int>(),
    };

我只收回了包含数据的行。

答案 2 :(得分:2)

我试过这个,对我的情况很好。

//get the sheets info
        var faceWrksheet = excel.Worksheet(facemechSheetName);
      // get the total rows count.
        int _faceMechRows = faceWrksheet.Count();

      // append with End Range.
  var faceMechResult = excel.WorksheetRange<ExcelFaceMech>("A5", "AS" + _faceMechRows.ToString(), SheetName).
                        Where(i => i.WorkOrder != null).Select(x => x).ToList();

答案 3 :(得分:1)

您是否尝试过WorksheetRange<Company>("B3", "G")

答案 4 :(得分:0)

不幸的是,在LinqToExcel框架的这一刻和迭代中,似乎没有任何方法可以做到这一点。

为了解决这个问题,我们要求客户将数据上传到excel文档中的自己的“工作表”中。第一行的标题行及其下的数据。如果他们想要任何“元数据”,他们需要将其包含在另一张表中。以下是LinqToExcel documentation中有关如何查询特定工作表的示例。

var excel = new ExcelQueryFactory("excelFileName");
var oldCompanies = from c in repo.Worksheet<Company>("US Companies") //worksheet name = 'US Companies'
                   where c.LaunchDate < new DateTime(1900, 0, 0)
                   select c;