2017-05-12 260 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);