Commit 099d10a5dc2645b6448cdb59f999be5261542de9
1 parent
f29b4353
Exists in
master
1.excel文件类型文件魔数头判断 2.fix a bug about file suff bug
Showing
3 changed files
with
38 additions
and
37 deletions
Show diff stats
src/main/java/com/taover/easyexcel/analysis/v07/handlers/CellTagHandler.java
1 | 1 | package com.taover.easyexcel.analysis.v07.handlers; |
2 | 2 | |
3 | +import org.apache.poi.xssf.model.StylesTable; | |
3 | 4 | import org.apache.poi.xssf.usermodel.XSSFCellStyle; |
4 | 5 | import org.xml.sax.Attributes; |
5 | 6 | |
... | ... | @@ -46,12 +47,15 @@ public class CellTagHandler extends AbstractXlsxTagHandler { |
46 | 47 | } else { |
47 | 48 | dateFormatIndexInteger = Integer.parseInt(dateFormatIndex); |
48 | 49 | } |
49 | - XSSFCellStyle xssfCellStyle = | |
50 | - xlsxReadContext.xlsxReadWorkbookHolder().getStylesTable().getStyleAt(dateFormatIndexInteger); | |
51 | - int dataFormat = xssfCellStyle.getDataFormat(); | |
52 | - xlsxReadSheetHolder.getTempCellData().setDataFormat(dataFormat); | |
53 | - xlsxReadSheetHolder.getTempCellData().setDataFormatString(BuiltinFormats.getBuiltinFormat(dataFormat, | |
54 | - xssfCellStyle.getDataFormatString(), xlsxReadSheetHolder.getGlobalConfiguration().getLocale())); | |
50 | + | |
51 | + StylesTable stylesTable = xlsxReadContext.xlsxReadWorkbookHolder().getStylesTable(); | |
52 | + if(stylesTable != null) { | |
53 | + XSSFCellStyle xssfCellStyle = stylesTable.getStyleAt(dateFormatIndexInteger); | |
54 | + int dataFormat = xssfCellStyle.getDataFormat(); | |
55 | + xlsxReadSheetHolder.getTempCellData().setDataFormat(dataFormat); | |
56 | + xlsxReadSheetHolder.getTempCellData().setDataFormatString(BuiltinFormats.getBuiltinFormat(dataFormat, | |
57 | + xssfCellStyle.getDataFormatString(), xlsxReadSheetHolder.getGlobalConfiguration().getLocale())); | |
58 | + } | |
55 | 59 | } |
56 | 60 | |
57 | 61 | } | ... | ... |
src/main/java/com/taover/easyexcel/support/ExcelTypeEnum.java
... | ... | @@ -46,29 +46,21 @@ public enum ExcelTypeEnum { |
46 | 46 | if (!file.exists()) { |
47 | 47 | throw new ExcelAnalysisException("File " + file.getAbsolutePath() + " not exists."); |
48 | 48 | } |
49 | - // If there is a password, use the FileMagic first | |
50 | - if (!StringUtils.isEmpty(readWorkbook.getPassword())) { | |
51 | - BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file)); | |
52 | - try { | |
53 | - return recognitionExcelType(bufferedInputStream); | |
54 | - } finally { | |
55 | - bufferedInputStream.close(); | |
56 | - } | |
57 | - } | |
58 | - // Use the name to determine the type | |
59 | - String fileName = file.getName(); | |
60 | - if (fileName.endsWith(XLSX.getValue())) { | |
61 | - return XLSX; | |
62 | - } else if (fileName.endsWith(XLS.getValue())) { | |
63 | - return XLS; | |
64 | - } | |
65 | - if (StringUtils.isEmpty(readWorkbook.getPassword())) { | |
66 | - BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file)); | |
67 | - try { | |
68 | - return recognitionExcelType(bufferedInputStream); | |
69 | - } finally { | |
70 | - bufferedInputStream.close(); | |
71 | - } | |
49 | + | |
50 | + // use the FileMagic first | |
51 | + BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file)); | |
52 | + try { | |
53 | + return recognitionExcelType(bufferedInputStream); | |
54 | + } catch (Exception e) { | |
55 | + // Use the name to determine the type | |
56 | + String fileName = file.getName(); | |
57 | + if (fileName.endsWith(XLSX.getValue())) { | |
58 | + return XLSX; | |
59 | + } else if (fileName.endsWith(XLS.getValue())) { | |
60 | + return XLS; | |
61 | + } | |
62 | + } finally { | |
63 | + bufferedInputStream.close(); | |
72 | 64 | } |
73 | 65 | } |
74 | 66 | if (!inputStream.markSupported()) { | ... | ... |
src/test/java/com/taover/easyexcel/test/demo/read/ReadTest.java
... | ... | @@ -252,7 +252,7 @@ public class ReadTest { |
252 | 252 | // } |
253 | 253 | |
254 | 254 | // 这里 也可以不指定class,返回一个list,然后读取第一个sheet 同步读取会自动finish |
255 | - List<Map<Integer, String>> listMap = EasyExcel.read("D://demo.xls").headRowNumber(0).readHiddenRow(false).sheet(true).doReadSync(); | |
255 | + List<Map<Integer, String>> listMap = EasyExcel.read("D://debug//suffixwrong//demo.xls").headRowNumber(0).readHiddenRow(false).sheet(true).doReadSync(); | |
256 | 256 | for (Map<Integer, String> data : listMap) { |
257 | 257 | // 返回每条数据的键值对 表示所在的列 和所在列的值 |
258 | 258 | LOGGER.info("读取到数据:{}", JSON.toJSONString(data)); |
... | ... | @@ -267,15 +267,20 @@ public class ReadTest { |
267 | 267 | } |
268 | 268 | |
269 | 269 | public void readTestSynchronousRead() { |
270 | - File dDir = new File("D:\\readtest"); | |
270 | + String dirStr = "D://debug//suffixwrong//"; | |
271 | + File dDir = new File(dirStr); | |
271 | 272 | String[] sonFileNameArr = dDir.list(); |
272 | 273 | for(String item: sonFileNameArr) { |
273 | - List<Map<Integer, String>> listMap = EasyExcel.read("D:\\readtest\\"+item).headRowNumber(0).readHiddenRow(false).sheet(true).doReadSync(); | |
274 | - LOGGER.info("======文件名称:"+item+"======"); | |
275 | - for (Map<Integer, String> data : listMap) { | |
276 | - // 返回每条数据的键值对 表示所在的列 和所在列的值 | |
277 | - LOGGER.info(">{}", JSON.toJSONString(data)); | |
278 | - } | |
274 | + try { | |
275 | + LOGGER.info("======文件名称:"+item+"======"); | |
276 | + List<Map<Integer, String>> listMap = EasyExcel.read(dirStr+item).headRowNumber(0).readHiddenRow(false).sheet(true).doReadSync(); | |
277 | + for (Map<Integer, String> data : listMap) { | |
278 | + // 返回每条数据的键值对 表示所在的列 和所在列的值 | |
279 | + LOGGER.info(">{}", JSON.toJSONString(data)); | |
280 | + } | |
281 | + }catch (Exception e) { | |
282 | + e.printStackTrace(); | |
283 | + } | |
279 | 284 | } |
280 | 285 | } |
281 | 286 | ... | ... |