Commit 78e23f0f677dd1ef0bc676b21b465b2223a25ca7
Exists in
master
优化excel
Showing
4 changed files
with
65 additions
and
27 deletions
Show diff stats
build.gradle
@@ -59,7 +59,7 @@ uploadArchives { | @@ -59,7 +59,7 @@ uploadArchives { | ||
59 | authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD) | 59 | authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD) |
60 | } | 60 | } |
61 | pom.project { | 61 | pom.project { |
62 | - version '1.1.69' | 62 | + version '1.1.90' |
63 | artifactId ARTIFACT_Id | 63 | artifactId ARTIFACT_Id |
64 | groupId GROUP_ID | 64 | groupId GROUP_ID |
65 | packaging TYPE | 65 | packaging TYPE |
src/main/java/com/taover/util/UtilExcel.java
@@ -2,6 +2,7 @@ package com.taover.util; | @@ -2,6 +2,7 @@ package com.taover.util; | ||
2 | 2 | ||
3 | import java.io.File; | 3 | import java.io.File; |
4 | import java.io.FileOutputStream; | 4 | import java.io.FileOutputStream; |
5 | +import java.math.BigDecimal; | ||
5 | import java.text.DecimalFormat; | 6 | import java.text.DecimalFormat; |
6 | import java.text.SimpleDateFormat; | 7 | import java.text.SimpleDateFormat; |
7 | import java.util.ArrayList; | 8 | import java.util.ArrayList; |
@@ -10,7 +11,9 @@ import java.util.HashMap; | @@ -10,7 +11,9 @@ import java.util.HashMap; | ||
10 | import java.util.List; | 11 | import java.util.List; |
11 | import java.util.Map; | 12 | import java.util.Map; |
12 | 13 | ||
14 | +import org.apache.poi.hssf.usermodel.HSSFDataFormatter; | ||
13 | import org.apache.poi.hssf.usermodel.HSSFWorkbook; | 15 | import org.apache.poi.hssf.usermodel.HSSFWorkbook; |
16 | +import org.apache.poi.openxml4j.util.ZipSecureFile; | ||
14 | import org.apache.poi.ss.usermodel.Cell; | 17 | import org.apache.poi.ss.usermodel.Cell; |
15 | import org.apache.poi.ss.usermodel.CellStyle; | 18 | import org.apache.poi.ss.usermodel.CellStyle; |
16 | import org.apache.poi.ss.usermodel.CellType; | 19 | import org.apache.poi.ss.usermodel.CellType; |
@@ -28,7 +31,11 @@ public class UtilExcel { | @@ -28,7 +31,11 @@ public class UtilExcel { | ||
28 | private final static String CSV =".csv"; //csv | 31 | private final static String CSV =".csv"; //csv |
29 | 32 | ||
30 | private final static int maxExcelRowNum = 10000; | 33 | private final static int maxExcelRowNum = 10000; |
31 | - private final static int maxExcelColumnNum = 50; | 34 | + private final static int maxExcelColumnNum = 100; |
35 | + | ||
36 | + static { | ||
37 | + ZipSecureFile.setMinInflateRatio(-1.0d); | ||
38 | + } | ||
32 | 39 | ||
33 | /** | 40 | /** |
34 | * 描述:根据文件后缀,自适应上传文件的版本 | 41 | * 描述:根据文件后缀,自适应上传文件的版本 |
@@ -382,10 +389,6 @@ public class UtilExcel { | @@ -382,10 +389,6 @@ public class UtilExcel { | ||
382 | } | 389 | } |
383 | Workbook wb = UtilExcel.getWorkbook(filepath, true); | 390 | Workbook wb = UtilExcel.getWorkbook(filepath, true); |
384 | Sheet sheet = wb.getSheetAt(sheetIndex); | 391 | Sheet sheet = wb.getSheetAt(sheetIndex); |
385 | - int end = sheet.getLastRowNum(); | ||
386 | - if(end > UtilExcel.maxExcelRowNum){ | ||
387 | - throw new Exception("目前系统只支持读取10000行以内记录,您当前Excel行数过大"); | ||
388 | - } | ||
389 | return readExcelBySheet(sheet, UtilExcel.maxExcelRowNum, false); | 392 | return readExcelBySheet(sheet, UtilExcel.maxExcelRowNum, false); |
390 | } | 393 | } |
391 | 394 | ||
@@ -395,11 +398,7 @@ public class UtilExcel { | @@ -395,11 +398,7 @@ public class UtilExcel { | ||
395 | 398 | ||
396 | private static List<List<Object>> readExcelBySheetIndex(Workbook wb, int sheetIndex, boolean hasRowLimit) throws Exception{ | 399 | private static List<List<Object>> readExcelBySheetIndex(Workbook wb, int sheetIndex, boolean hasRowLimit) throws Exception{ |
397 | Sheet sheet = wb.getSheetAt(sheetIndex); | 400 | Sheet sheet = wb.getSheetAt(sheetIndex); |
398 | - int end = sheet.getLastRowNum(); | ||
399 | if(hasRowLimit){ | 401 | if(hasRowLimit){ |
400 | - if(end > UtilExcel.maxExcelRowNum) { | ||
401 | - throw new Exception("目前系统只支持读取10000行以内记录,您当前Excel行数过大"); | ||
402 | - } | ||
403 | return readExcelBySheet(sheet, UtilExcel.maxExcelRowNum, false); | 402 | return readExcelBySheet(sheet, UtilExcel.maxExcelRowNum, false); |
404 | }else { | 403 | }else { |
405 | return readExcelBySheet(sheet, Integer.MAX_VALUE, false); | 404 | return readExcelBySheet(sheet, Integer.MAX_VALUE, false); |
@@ -454,14 +453,43 @@ public class UtilExcel { | @@ -454,14 +453,43 @@ public class UtilExcel { | ||
454 | if(currCellType.compareTo(CellType.STRING) == 0){ | 453 | if(currCellType.compareTo(CellType.STRING) == 0){ |
455 | return UtilString.trimCodePage(cell.getRichStringCellValue().getString()); | 454 | return UtilString.trimCodePage(cell.getRichStringCellValue().getString()); |
456 | }else if(currCellType.compareTo(CellType.NUMERIC) == 0){ | 455 | }else if(currCellType.compareTo(CellType.NUMERIC) == 0){ |
457 | - if (cell.getCellStyle().getDataFormat()==28||cell.getCellStyle().getDataFormat()==31 || cell.getCellStyle().getDataFormat() == 58) { | ||
458 | - // 如果是date类型则 ,获取该cell的date值 | ||
459 | - return new SimpleDateFormat("yyyy-MM-dd").format(DateUtil.getJavaDate(cell.getNumericCellValue())); | ||
460 | - } else { | ||
461 | - // 纯数字gaoming 新增兼容浮点型,转成字符串读取,不然小数点被省略了 | ||
462 | - cell.setCellType(CellType.STRING); | ||
463 | - return UtilString.trimCodePage(cell.getRichStringCellValue().getString()); | 456 | + |
457 | + /** | ||
458 | + * yyyy-MM-dd----- 14 | ||
459 | + yyyy年m月d日--- 31 | ||
460 | + yyyy年m月------- 57 | ||
461 | + m月d日 ---------- 58 | ||
462 | + HH:mm----------- 20 | ||
463 | + h时mm分 ------- 32 | ||
464 | + yyyy-MM-dd HH:hh:ss 22 | ||
465 | + */ | ||
466 | + System.out.println(cell.getCellStyle().getDataFormat()); | ||
467 | + short format = cell.getCellStyle().getDataFormat(); | ||
468 | + if (cell.getCellStyle().getDataFormat()==28 || cell.getCellStyle().getDataFormat()==22||cell.getCellStyle().getDataFormat()==31 | ||
469 | + || cell.getCellStyle().getDataFormat() == 58 || cell.getCellStyle().getDataFormat()==14 | ||
470 | + || cell.getCellStyle().getDataFormat()==57 || cell.getCellStyle().getDataFormat()==32 || cell.getCellStyle().getDataFormat()==20) { | ||
471 | + | ||
472 | + // 如果是date类型则 ,获取该cell的date值 | ||
473 | + //return new SimpleDateFormat("yyyy-MM-dd").format(DateUtil.getJavaDate(cell.getNumericCellValue())); | ||
474 | + SimpleDateFormat sdf = null; | ||
475 | + if(format == 14 || format == 31 || format == 57 || format == 58){ | ||
476 | + //日期 | ||
477 | + sdf = new SimpleDateFormat("yyyy-MM-dd"); | ||
478 | + }else if (format == 20 || format == 32) { | ||
479 | + //时间 | ||
480 | + sdf = new SimpleDateFormat("HH:mm"); | ||
481 | + }else { | ||
482 | + sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | ||
483 | + } | ||
484 | + double value = cell.getNumericCellValue(); | ||
485 | + Date date = org.apache.poi.ss.usermodel.DateUtil.getJavaDate(value); | ||
486 | + return sdf.format(date); | ||
487 | + } else { | ||
488 | + //gaoming 这个是poi自带获取value通用,如果再有问题就用这个试试!!!此处用于获取纯数字和小数类型 | ||
489 | + HSSFDataFormatter dataFormatter = new HSSFDataFormatter(); | ||
490 | + return dataFormatter.formatCellValue(cell); | ||
464 | } | 491 | } |
492 | + | ||
465 | }else if(currCellType.compareTo(CellType.BOOLEAN) == 0){ | 493 | }else if(currCellType.compareTo(CellType.BOOLEAN) == 0){ |
466 | return cell.getBooleanCellValue(); | 494 | return cell.getBooleanCellValue(); |
467 | }else if(currCellType.compareTo(CellType.FORMULA) == 0){ | 495 | }else if(currCellType.compareTo(CellType.FORMULA) == 0){ |
@@ -492,16 +520,13 @@ public class UtilExcel { | @@ -492,16 +520,13 @@ public class UtilExcel { | ||
492 | } | 520 | } |
493 | Workbook wb = UtilExcel.getWorkbook(filepath, true); | 521 | Workbook wb = UtilExcel.getWorkbook(filepath, true); |
494 | Sheet sheet = wb.getSheetAt(sheetIndex); | 522 | Sheet sheet = wb.getSheetAt(sheetIndex); |
495 | - int end = sheet.getLastRowNum(); | ||
496 | - if(end > UtilExcel.maxExcelRowNum){ | ||
497 | - throw new Exception("目前系统只支持读取10000行以内记录,您当前Excel行数过大"); | ||
498 | - } | ||
499 | return readExcelBySheet(sheet, UtilExcel.maxExcelRowNum, true); | 523 | return readExcelBySheet(sheet, UtilExcel.maxExcelRowNum, true); |
500 | } | 524 | } |
501 | 525 | ||
502 | public static void main(String args[]){ | 526 | public static void main(String args[]){ |
503 | //String filepath = "C:\\Users\\root\\Desktop\\千丁-6.27.xlsx"; | 527 | //String filepath = "C:\\Users\\root\\Desktop\\千丁-6.27.xlsx"; |
504 | - String filepath = "C:\\Users\\gaoming\\Desktop\\jvm_crash.xls"; | 528 | + String filepath = "C:\\Users\\gaoming\\Desktop\\测试返单数量.xlsx"; |
529 | + //String filepath = "C:\\Users\\EDZ\\Desktop\\aaa.xlsx"; | ||
505 | List<List<Object>> data = null; | 530 | List<List<Object>> data = null; |
506 | 531 | ||
507 | try { | 532 | try { |
@@ -513,10 +538,12 @@ public class UtilExcel { | @@ -513,10 +538,12 @@ public class UtilExcel { | ||
513 | System.out.println((end-start)/1000); | 538 | System.out.println((end-start)/1000); |
514 | 539 | ||
515 | 540 | ||
516 | - System.out.println(map); | ||
517 | -// data = map.get("0"); | ||
518 | -// | ||
519 | -// System.out.println(data); | 541 | + //System.out.println(map); |
542 | + data = map.get("0"); | ||
543 | + System.out.println(data); | ||
544 | + for (int i = 0; i < data.size(); i++) { | ||
545 | + System.out.println(data.get(i).get(1)); | ||
546 | + } | ||
520 | // System.out.println(data.size()); | 547 | // System.out.println(data.size()); |
521 | // System.out.println(UtilExcel.readExcelAllSheetMap(filepath)); | 548 | // System.out.println(UtilExcel.readExcelAllSheetMap(filepath)); |
522 | } catch (Exception e) { | 549 | } catch (Exception e) { |
src/main/java/com/taover/util/UtilString.java
@@ -45,7 +45,7 @@ public class UtilString { | @@ -45,7 +45,7 @@ public class UtilString { | ||
45 | } | 45 | } |
46 | 46 | ||
47 | Pattern pattern = Pattern.compile("\\S"); | 47 | Pattern pattern = Pattern.compile("\\S"); |
48 | - int endIndex = source.length(); | 48 | + int endIndex = source.length()-1; |
49 | for(int i=source.length()-1; i>=0; --i){ | 49 | for(int i=source.length()-1; i>=0; --i){ |
50 | char data = source.charAt(i); | 50 | char data = source.charAt(i); |
51 | if(pattern.matcher(data+"").find()){ | 51 | if(pattern.matcher(data+"").find()){ |
src/test/java/TempExcel.java
@@ -9,6 +9,17 @@ import com.taover.util.UtilExcel; | @@ -9,6 +9,17 @@ import com.taover.util.UtilExcel; | ||
9 | 9 | ||
10 | public class TempExcel { | 10 | public class TempExcel { |
11 | public static void main(String[] args){ | 11 | public static void main(String[] args){ |
12 | + checkExcelError(); | ||
13 | + } | ||
14 | + | ||
15 | + public static void checkExcelError() { | ||
16 | + List<List<Object>> data = null; | ||
17 | + try { | ||
18 | + data = UtilExcel.readExcelAllSheet("C:\\Users\\Administrator\\Desktop\\异常Excel\\大文件测试2.xlsx"); | ||
19 | + } catch (Exception e) { | ||
20 | + e.printStackTrace(); | ||
21 | + } | ||
22 | + System.out.println("end"); | ||
12 | //dealExcel(); | 23 | //dealExcel(); |
13 | readExcel(); | 24 | readExcel(); |
14 | } | 25 | } |