2012-11-26 48 views
9

Tôi đang sử dụng bản phát hành 3.1 của thư viện EPPlus để thử truy cập vào một trang tính trong tệp Excel. Khi tôi thử một trong các phương pháp sau, tôi nhận được System.ArgumentException : An item with the same key has already been added.Cách truy cập trang tính trong EPPlus?

using (ExcelPackage package = new ExcelPackage(new FileInfo(sourceFilePath))) 
{ 
    var worksheet = package.Workbook.Worksheets[0]; 

    // OR 

    foreach (var excelWorksheet in package.Workbook.Worksheets) 
    ... 
} 

Exception Stack:

System.ArgumentException : An item with the same key has already been added. 
    at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource) 
    at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add) 
    at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value) 
    at OfficeOpenXml.ExcelNamedRangeCollection.Add(String Name, ExcelRangeBase Range) 
    at OfficeOpenXml.ExcelWorkbook.GetDefinedNames() 
    at OfficeOpenXml.ExcelPackage.get_Workbook() 

Điều này có vẻ như chức năng rất cơ bản để có được như vậy bị phá vỡ .. Tôi đang làm điều gì sai?

+0

Có thể rằng file excel là một file 'xls' ban đầu? EPPlus chỉ hiểu 'xlsx'. Cố gắng lưu nó dưới dạng 'xlsx' theo cách thủ công trước. –

Trả lời

4

Sổ làm việc được đề cập đã đặt tên dải ô được xác định. Đây là những vấn đề gây ra nên tôi đã tạo một tệp xlsx mới chỉ với dữ liệu tôi cần và nó có thể mở tốt.

+0

Tôi biết điều này là 2 tuổi, nhưng nếu điều này giải quyết được vấn đề của bạn, bạn nên chấp nhận câu trả lời của riêng mình để giúp làm nổi bật câu trả lời cho những người khác có cùng vấn đề – psubsee2003

+0

đây là giải pháp có thể xảy ra duy nhất đối với tôi. Tôi đã xóa các Dải tên đã đặt tên; nó không giúp được gì. Điểm chính là đối tượng Worksheets ném ra ngoại lệ. –

21

Tôi tin rằng excel làm bảng tính từ chỉ số 1 không chỉ số 0

var worksheet = package.Workbook.Worksheets[0]; 

nên

var worksheet = package.Workbook.Worksheets[1]; 

để đọc các bảng tính đầu tiên.

+2

Trong excel và khá tất cả mọi thứ mà kết nối với nó, chỉ số bắt đầu với 1, không 0. Lời nhắc tốt đẹp. Cảm ơn. – Doruk

13

Ngoài ra, bạn có thể quản lý chúng bằng cách tham khảo tên:

var worksheet = package.Workbook.Worksheets["Sheet1"]; 
3

Ít nhất với Epplus 3.1.3.0 bạn chỉ có thể sử dụng sau đây để truy cập vào bảng đầu tiên.

ExcelWorksheet workSheet = excel.Workbook.Worksheets.First(); 
2

Hãy chắc chắn rằng các tài liệu được tạo ra hoặc lưu với MS Excel (không OpenOffice, LibreOffice, vv)

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