2012-08-31 26 views
6

Tôi đang sử dụng LinqToExcel library. Làm việc tuyệt vời cho đến nay, ngoại trừ việc tôi cần phải bắt đầu truy vấn tại một hàng cụ thể. Điều này là do bảng tính excel từ máy khách sử dụng một số hình ảnh và thông tin "tiêu đề" ở đầu tệp excel trước khi dữ liệu thực sự bắt đầu.LinqToExcel - Cần bắt đầu tại một hàng cụ thể

Bản thân dữ liệu sẽ đơn giản để đọc và khá chung chung, tôi chỉ cần biết cách yêu cầu số ExcelQueryFactory để bắt đầu tại một hàng cụ thể.

Tôi biết tùy chọn WorksheetRange<Company>("B3", "G10"), nhưng tôi không muốn chỉ định hàng kết thúc, chỉ cần bắt đầu đọc đọc tệp.

Sử dụng v mới nhất. Của LinqToExcel với C#

Trả lời

1

Các bạn đã thử WorksheetRange<Company>("B3", "G")

+0

Yea, không may, nó cho tôi lỗi "Đối số EndRange 'G' là định dạng không hợp lệ cho tên ô" – contactmatt

0

Unforunatly, tại thời điểm này và lặp đi lặp lại trong khuôn khổ LinqToExcel, có không xuất hiện để có cách nào để làm điều này.

Để giải quyết vấn đề này, chúng tôi yêu cầu khách hàng có dữ liệu được tải lên trong "trang tính" của chính nó trong tài liệu excel. Hàng tiêu đề ở hàng đầu tiên và dữ liệu bên dưới. Nếu họ muốn có bất kỳ "siêu dữ liệu" nào, họ sẽ cần phải bao gồm điều này trong một trang tính khác. Dưới đây là ví dụ từ số LinqToExcel documentation về cách truy vấn một trang tính cụ thể.

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; 
2

Tôi chỉ cố gắng mã này và nó dường như chỉ làm việc tốt:

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

Tôi chỉ có phía sau hàng với dữ liệu.

4

Tôi giả sử rằng bạn đã giải quyết điều này, nhưng có lẽ đối với những người khác - có vẻ như bạn có thể sử dụng

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 
} 

Không đơn giản như quy định cụ thể một số Range ("B3", ...), mà còn đường đi . Hy vọng điều này sẽ giúp ít nhất ai đó;)

+0

, nơi bạn gán biến 'length'? – CodeArtist

+0

Vâng, thông thường nó sẽ là 'allRows.Count' hoặc' allRows.Count() 'hoặc' allRows.Length' (không biết ngay bây giờ, xin lỗi), nếu bạn muốn đọc tất cả các dòng. Hoặc như là một thay thế để xác định (không tồn tại) 'Phạm vi (" B3 "," G10 ")' bạn phải tính toán nó. 'Độ dài' chỉ được sử dụng cho mục đích hiển thị. Lúc đó, không có giải pháp đơn giản nào AFAIK ... Điểm tốt, bài đăng gốc đã chỉnh sửa. – podvlada

2

Tôi đã thử điều này, hoạt động tốt cho kịch bản của tôi.

//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(); 
+0

Tôi chỉ thấy điều này rất hữu ích nhưng muốn chỉ ra rằng bạn cần thêm giá trị hàng bắt đầu vào số lượng bản ghi hoặc bạn bỏ lỡ số dòng ở cuối vì vậy nó phải là int _faceMechRows = faceWrksheet.Count() + 5; –

+0

@DavidMolyneux im không chắc chắn về điều này là 2 năm trở lại, nhưng trong trường hợp của tôi nó đã được bỏ qua một số hồ sơ tiêu đề. – Eldho

+0

Xin chào bạn là chính xác Tôi đã xem xét điều này nhiều hơn một chút, nếu bạn có dữ liệu trong các hàng trên cùng thì nó hoạt động tốt. Nếu như tôi, chúng chỉ là những hàng trống, sau đó chúng không được tải, và tổng số hàng là ngắn bởi số lượng hàng trống.Vì vậy, nếu bạn có 5 hàng trống và 15 hàng dữ liệu (tổng 20 hàng) tổng số hàng là 15 để phạm vi của bạn sẽ đi từ hàng 5 sang hàng 15, thiếu 5 hàng cuối cùng thêm vào hàng bị bỏ qua sẽ đưa bạn quay lại tổng số chính xác. –

Các vấn đề liên quan