7

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

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

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

使用最新版本的 LinqToExcel 和 C#

4

5 回答 5

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
}

不是指定一些 Range("B3", ...) 这么简单,还要指定方式。希望这至少对某人有所帮助;)

于 2013-12-16T17:01:16.150 回答
4

我刚刚尝试了这段代码,它似乎工作得很好:

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>(),
    };

我只取回了带有数据的行。

于 2012-09-03T01:28:54.420 回答
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();
于 2014-06-19T10:45:10.953 回答
1

你有没有尝试过WorksheetRange<Company>("B3", "G")

于 2012-08-31T18:22:19.887 回答
0

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

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

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;
于 2012-09-02T14:10:17.387 回答