2011-11-09 77 views
1

我正在閱讀使用來自http://exceldatareader.codeplex.com/的Excel數據讀取器的XLSX(Microsoft Excel XML文件),我得到了一些意想不到的結果。使用Excel數據讀取器的意外結果

從多個選項卡

var reader = Excel.ExcelReaderFactory.CreateOpenXmlReader(uploadFile.InputStream); 
while (reader.Read()) 
{ 
    System.Diagnostics.Debug.WriteLine(reader.FieldCount); 
    for (int i = 0; i < reader.FieldCount; i++) 
    { 
     System.Diagnostics.Debug.Write(reader[i] + "*"); 
    } 
    System.Diagnostics.Debug.WriteLine("\n~\n"); 
} 

在單行中下面的代碼輸出數據,我可以由3個或多個選項卡中獲取數據。

我希望這將循環顯示第一個選項卡的所有內容,只顯示第一個選項卡。

我錯過了什麼?

更新:如果excel文件中只有一個選項卡,上面的代碼看起來確實很好。這可能只是這個庫的一個錯誤。是否有其他人使用此庫來解析具有多個選項卡的Excel文件?

感謝

+0

另外一個意想不到的結果是當我們嘗試讀取使用逗號(,)作爲小數點的值的excel時。它將3,5轉換爲35.:-O –

回答

-1

這就是爲什麼我使用NPOI。我已經嘗試了其他幾位Excel閱讀器,其中一個實際上是爲我工作的。

2

好的,所以我的回覆對於這個問題是非常晚的,但是如果有任何幫助,請嘗試在reader.NextResult()塊中封裝代碼。這與您在DataSet中通過多個DataTable對象解析時的方式相同。

此外,這種方法具有一個非常小的內存佔用而不是在reader.AsDataSet()方法,其中豬大量的內存即使對於工作簿小20MBs

例如

var reader = Excel.ExcelReaderFactory.CreateOpenXmlReader(uploadFile.InputStream); 
do 
{ 
    while (reader.Read()) 
    { 
     System.Diagnostics.Debug.WriteLine(reader.FieldCount); 
     for (int i = 0; i < reader.FieldCount; i++) 
     { 
      System.Diagnostics.Debug.Write(reader[i] + "*"); 
     } 
     System.Diagnostics.Debug.WriteLine("\n~\n"); 
    } 
}while(reader.NextResult());