diff --git a/src/main/java/com/taover/easyexcel/analysis/v07/handlers/CellTagHandler.java b/src/main/java/com/taover/easyexcel/analysis/v07/handlers/CellTagHandler.java index 57bdd5d..14a7e14 100644 --- a/src/main/java/com/taover/easyexcel/analysis/v07/handlers/CellTagHandler.java +++ b/src/main/java/com/taover/easyexcel/analysis/v07/handlers/CellTagHandler.java @@ -1,5 +1,6 @@ package com.taover.easyexcel.analysis.v07.handlers; +import org.apache.poi.xssf.model.StylesTable; import org.apache.poi.xssf.usermodel.XSSFCellStyle; import org.xml.sax.Attributes; @@ -46,12 +47,15 @@ public class CellTagHandler extends AbstractXlsxTagHandler { } else { dateFormatIndexInteger = Integer.parseInt(dateFormatIndex); } - XSSFCellStyle xssfCellStyle = - xlsxReadContext.xlsxReadWorkbookHolder().getStylesTable().getStyleAt(dateFormatIndexInteger); - int dataFormat = xssfCellStyle.getDataFormat(); - xlsxReadSheetHolder.getTempCellData().setDataFormat(dataFormat); - xlsxReadSheetHolder.getTempCellData().setDataFormatString(BuiltinFormats.getBuiltinFormat(dataFormat, - xssfCellStyle.getDataFormatString(), xlsxReadSheetHolder.getGlobalConfiguration().getLocale())); + + StylesTable stylesTable = xlsxReadContext.xlsxReadWorkbookHolder().getStylesTable(); + if(stylesTable != null) { + XSSFCellStyle xssfCellStyle = stylesTable.getStyleAt(dateFormatIndexInteger); + int dataFormat = xssfCellStyle.getDataFormat(); + xlsxReadSheetHolder.getTempCellData().setDataFormat(dataFormat); + xlsxReadSheetHolder.getTempCellData().setDataFormatString(BuiltinFormats.getBuiltinFormat(dataFormat, + xssfCellStyle.getDataFormatString(), xlsxReadSheetHolder.getGlobalConfiguration().getLocale())); + } } } diff --git a/src/main/java/com/taover/easyexcel/support/ExcelTypeEnum.java b/src/main/java/com/taover/easyexcel/support/ExcelTypeEnum.java index 57955c2..5e2dcc6 100644 --- a/src/main/java/com/taover/easyexcel/support/ExcelTypeEnum.java +++ b/src/main/java/com/taover/easyexcel/support/ExcelTypeEnum.java @@ -46,29 +46,21 @@ public enum ExcelTypeEnum { if (!file.exists()) { throw new ExcelAnalysisException("File " + file.getAbsolutePath() + " not exists."); } - // If there is a password, use the FileMagic first - if (!StringUtils.isEmpty(readWorkbook.getPassword())) { - BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file)); - try { - return recognitionExcelType(bufferedInputStream); - } finally { - bufferedInputStream.close(); - } - } - // Use the name to determine the type - String fileName = file.getName(); - if (fileName.endsWith(XLSX.getValue())) { - return XLSX; - } else if (fileName.endsWith(XLS.getValue())) { - return XLS; - } - if (StringUtils.isEmpty(readWorkbook.getPassword())) { - BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file)); - try { - return recognitionExcelType(bufferedInputStream); - } finally { - bufferedInputStream.close(); - } + + // use the FileMagic first + BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file)); + try { + return recognitionExcelType(bufferedInputStream); + } catch (Exception e) { + // Use the name to determine the type + String fileName = file.getName(); + if (fileName.endsWith(XLSX.getValue())) { + return XLSX; + } else if (fileName.endsWith(XLS.getValue())) { + return XLS; + } + } finally { + bufferedInputStream.close(); } } if (!inputStream.markSupported()) { diff --git a/src/test/java/com/taover/easyexcel/test/demo/read/ReadTest.java b/src/test/java/com/taover/easyexcel/test/demo/read/ReadTest.java index e1fcb09..6d04a0f 100644 --- a/src/test/java/com/taover/easyexcel/test/demo/read/ReadTest.java +++ b/src/test/java/com/taover/easyexcel/test/demo/read/ReadTest.java @@ -252,7 +252,7 @@ public class ReadTest { // } // 这里 也可以不指定class,返回一个list,然后读取第一个sheet 同步读取会自动finish - List> listMap = EasyExcel.read("D://demo.xls").headRowNumber(0).readHiddenRow(false).sheet(true).doReadSync(); + List> listMap = EasyExcel.read("D://debug//suffixwrong//demo.xls").headRowNumber(0).readHiddenRow(false).sheet(true).doReadSync(); for (Map data : listMap) { // 返回每条数据的键值对 表示所在的列 和所在列的值 LOGGER.info("读取到数据:{}", JSON.toJSONString(data)); @@ -267,15 +267,20 @@ public class ReadTest { } public void readTestSynchronousRead() { - File dDir = new File("D:\\readtest"); + String dirStr = "D://debug//suffixwrong//"; + File dDir = new File(dirStr); String[] sonFileNameArr = dDir.list(); for(String item: sonFileNameArr) { - List> listMap = EasyExcel.read("D:\\readtest\\"+item).headRowNumber(0).readHiddenRow(false).sheet(true).doReadSync(); - LOGGER.info("======文件名称:"+item+"======"); - for (Map data : listMap) { - // 返回每条数据的键值对 表示所在的列 和所在列的值 - LOGGER.info(">{}", JSON.toJSONString(data)); - } + try { + LOGGER.info("======文件名称:"+item+"======"); + List> listMap = EasyExcel.read(dirStr+item).headRowNumber(0).readHiddenRow(false).sheet(true).doReadSync(); + for (Map data : listMap) { + // 返回每条数据的键值对 表示所在的列 和所在列的值 + LOGGER.info(">{}", JSON.toJSONString(data)); + } + }catch (Exception e) { + e.printStackTrace(); + } } } -- libgit2 0.21.2