2017-05-12 261 views
0

我想讀取使用NPOI的excel [xls和xlsx],我使用下面的代碼,但它給'無法讀取整個標題; 27個字節讀;預計512字節「,同時讀取一個8KB的xls文件使用NPOI讀取Excel

byte[] byteArray = Encoding.UTF8.GetBytes(filepath); 
    MemoryStream stream = new MemoryStream(byteArray); 
    MemoryStream stream1 = new MemoryStream(Encoding.UTF8.GetBytes(filepath ?? "")); 

    NPOI.HSSF.UserModel.HSSFWorkbook hssfwb = default(HSSFWorkbook); 
    hssfwb = new NPOI.HSSF.UserModel.HSSFWorkbook(stream1); 
    Sheet sheet = hssfwb.GetSheetAt(0); 
    DataTable dtinputExcel = new DataTable(); 

我已經嘗試過所有可能的代碼在網絡上的這個錯誤。請指導我讀取任何大小的excel [xls/xlsx]的無錯方法。

+0

檢查,如果你的文件不在一個oter程序中打開,你可以讀鎖的文件,而不是。 –

+0

在閱讀excel /調用上面的代碼之前,我已經通過編碼關閉了excel過程,但它仍然會給出錯誤。 – Pratik

+0

檢查此鏈接https://stackoverflow.com/questions/5855813/npoi-how-to-read-file-using-npoi –

回答

0

的問題是,HSSFWorkbook構造函數期待包含內容的電子表格文件的流,而你是傳遞一個MemoryStream包含名的文件。您應該使用FileStream來讀取文件並將該流傳遞給HSSFWorkbook構造函數。

試試這樣說:

IWorkbook hssfwb; 
using (FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.Read)) 
{ 
    hssfwb = new HSSFWorkbook(fs); 
} 

ISheet sheet = hssfwb.GetSheetAt(0);