Commit 099d10a5dc2645b6448cdb59f999be5261542de9

Authored by unknown
1 parent f29b4353
Exists in master

1.excel文件类型文件魔数头判断 2.fix a bug about file suff bug

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  
... ...