尝试使用NPOI从Excel工作表中获取行时,FirstRowNum和LastRowNum返回-1。
IWorkbook workbook = null;
List<ImportedKPI> excelRows = new List<ImportedKPI>();
MemoryStream ms = new MemoryStream(array);
ISheet sheet = null;
workbook = WorkbookFactory.Create(ms);
sheet = workbook.GetSheet(mapping.Sheet);
//Do some stuff here and try to get rows
for (int i = sheet.FirstRowNum; i <= sheet.LastRowNum; i++)
//sheet.FirstRowNum = -1 && sheet.LastRowNum = -1
另一个值得一提的是,当我保存打开文件并关闭它(使用LibreOffice)时,它询问我是否要保存,之后它可以正常工作。在比较保存之前/之后的字节数组时,它们是不同的。
事实证明并非所有excel解析器都适用于所有类型。由于我通过电子邮件获得了优秀成绩,因此我必须根据NPOI和ExcelDataReader nugets执行一系列责任模式。这意味着当excel到来时我尝试使用第一个类来解析它(ExcelDataReader优先),如果它不成功,它会移动到NPOI并尝试用它解析它。当有许多来源时似乎更好的方式。