2012-11-26 61 views
9

我正在使用3.1版本的EPPlus庫來嘗試訪問Excel文件中的工作表。當我嘗試以下任一方法時,我會收到System.ArgumentException : An item with the same key has already been added如何訪問EPPlus中的工作表?

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

    // OR 

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

異常堆棧:

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() 

這似乎是非常基本的功能已經被打破這樣..我做錯了什麼?

+0

有沒有可能是Excel文件是一個'xls'文件最初? EPPlus只能理解'xlsx'。嘗試首先手動將其保存爲'xlsx'。 –

回答

4

有問題的工作簿已命名範圍已定義。這些都是導致問題,所以我創建了一個新的xlsx文件,只需要我需要的數據,並且它能夠正常打開。

+0

我知道這是2歲,但如果這解決了您的問題,您應該接受自己的答案,以幫助突出顯示其他人誰可能有相同的問題 – psubsee2003

+0

這是唯一可能的解決方案,對我來說,在所有的答案。我刪除了命名範圍;它沒有幫助。要點是Worksheets對象本身引發異常。 –

21

我相信,Excel會從工作表索引1沒有索引0

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

應該

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

讀取第一個工作表。

+2

在excel和所有連接到它的東西中,索引都以1開頭,而不是0。謝謝。 – Doruk

13

此外,您還可以通過引用名稱進行管理:

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

至少有Epplus 3.1.3.0,你可以簡單地使用下面的訪問第一個工作表。

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

確保創建或保存使用MS Excel文件(不是OpenOffice的,自由報辦公室等)