C# 使用NPOI读取Excel
我正在尝试使用NPOI读取excel[xls和xlsx],我使用以下代码,但它给出了“无法读取整个标题;读取27字节;读取8KB xls文件时应为512字节C# 使用NPOI读取Excel,c#,xlsx,xls,npoi,C#,Xlsx,Xls,Npoi,我正在尝试使用NPOI读取excel[xls和xlsx],我使用以下代码,但它给出了“无法读取整个标题;读取27字节;读取8KB xls文件时应为512字节 byte[] byteArray = Encoding.UTF8.GetBytes(filepath); MemoryStream stream = new MemoryStream(byteArray); MemoryStream stream1 = new MemoryStream(Encoding.UTF8.G
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]任何大小的无错误方法是什么。问题是
HSSFWorkbook
的构造函数希望有一个包含电子表格文件内容的流,而您正在传递一个包含文件名的MemoryStream
。您应该使用读取文件并将该流传递给HSSFWorkbook
构造函数
试着这样做:
IWorkbook hssfwb;
using (FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.Read))
{
hssfwb = new HSSFWorkbook(fs);
}
ISheet sheet = hssfwb.GetSheetAt(0);
检查您的文件是否未在oter程序中打开,您可能正在读取锁而不是文件。在读取excel/调用上述代码之前,我已通过编码关闭了excel进程,但它仍会给出错误。检查此链接