我正在使用LinqToExcel 库。到目前为止工作得很好,除了我需要在特定行开始查询。这是因为客户端的 excel 电子表格在数据实际开始之前在 excel 文件的顶部使用了一些图像和“标题”信息。
数据本身很容易阅读并且相当通用,我只需要知道如何告诉从ExcelQueryFactory
特定行开始。
我知道该WorksheetRange<Company>("B3", "G10")
选项,但我不想指定结束行,只是从哪里开始读取文件。
使用最新版本的 LinqToExcel 和 C#
我正在使用LinqToExcel 库。到目前为止工作得很好,除了我需要在特定行开始查询。这是因为客户端的 excel 电子表格在数据实际开始之前在 excel 文件的顶部使用了一些图像和“标题”信息。
数据本身很容易阅读并且相当通用,我只需要知道如何告诉从ExcelQueryFactory
特定行开始。
我知道该WorksheetRange<Company>("B3", "G10")
选项,但我不想指定结束行,只是从哪里开始读取文件。
使用最新版本的 LinqToExcel 和 C#
我想你已经解决了这个问题,但也许对其他人来说 - 看起来你可以使用
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", ...) 这么简单,还要指定方式。希望这至少对某人有所帮助;)
我刚刚尝试了这段代码,它似乎工作得很好:
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>(),
};
我只取回了带有数据的行。
我试过这个,适用于我的场景。
//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();
你有没有尝试过WorksheetRange<Company>("B3", "G")
不幸的是,目前在 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;