Commit 626d93d1c378d047c49bd9f2c795ce4509a8c32a

Authored by unknown
1 parent 45a966ad
Exists in master

ExcelUtil 增加行数限制与不限制接口

@@ -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.32' 62 + version '1.1.34'
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
@@ -237,26 +237,24 @@ public class UtilExcel { @@ -237,26 +237,24 @@ public class UtilExcel {
237 */ 237 */
238 public static List<List<Object>> readExcel(String filepath) throws Exception{ 238 public static List<List<Object>> readExcel(String filepath) throws Exception{
239 File file = new File(filepath); 239 File file = new File(filepath);
240 - List<List<Object>> result = new ArrayList<List<Object>>();  
241 if(!file.exists()){ 240 if(!file.exists()){
242 - return result; 241 + throw new Exception("Excel["+filepath+"]文件不存在");
243 } 242 }
244 Workbook wb = UtilExcel.getWorkbook(filepath, true); 243 Workbook wb = UtilExcel.getWorkbook(filepath, true);
245 - return readExcelBySheetIndex(filepath, wb.getActiveSheetIndex()); 244 + return readExcelBySheetIndex(wb, wb.getActiveSheetIndex());
246 } 245 }
247 246
248 /** 247 /**
249 * 读取excel表--当前激活的工作表 248 * 读取excel表--当前激活的工作表
250 * @param path 249 * @param path
251 */ 250 */
252 - public static List<List<Object>> readExcel(String filepath, int rowLimit) throws Exception{ 251 + public static List<List<Object>> readExcel(String filepath, boolean hasLimit) throws Exception{
253 File file = new File(filepath); 252 File file = new File(filepath);
254 - List<List<Object>> result = new ArrayList<List<Object>>();  
255 if(!file.exists()){ 253 if(!file.exists()){
256 - return result; 254 + throw new Exception("Excel["+filepath+"]文件不存在");
257 } 255 }
258 Workbook wb = UtilExcel.getWorkbook(filepath, true); 256 Workbook wb = UtilExcel.getWorkbook(filepath, true);
259 - return readExcelBySheetIndex(filepath, wb.getActiveSheetIndex()); 257 + return readExcelBySheetIndex(wb, wb.getActiveSheetIndex(), hasLimit);
260 } 258 }
261 259
262 /** 260 /**
@@ -267,9 +265,8 @@ public class UtilExcel { @@ -267,9 +265,8 @@ public class UtilExcel {
267 */ 265 */
268 public static List<List<Object>> readExcelExcludeHideLine(String filepath) throws Exception{ 266 public static List<List<Object>> readExcelExcludeHideLine(String filepath) throws Exception{
269 File file = new File(filepath); 267 File file = new File(filepath);
270 - List<List<Object>> result = new ArrayList<List<Object>>();  
271 if(!file.exists()){ 268 if(!file.exists()){
272 - return result; 269 + throw new Exception("Excel["+filepath+"]文件不存在");
273 } 270 }
274 Workbook wb = UtilExcel.getWorkbook(filepath, true); 271 Workbook wb = UtilExcel.getWorkbook(filepath, true);
275 return readExcelBySheetIndexExcludeHideLine(filepath, wb.getActiveSheetIndex()); 272 return readExcelBySheetIndexExcludeHideLine(filepath, wb.getActiveSheetIndex());
@@ -283,12 +280,12 @@ public class UtilExcel { @@ -283,12 +280,12 @@ public class UtilExcel {
283 File file = new File(filepath); 280 File file = new File(filepath);
284 List<List<Object>> result = new ArrayList<List<Object>>(); 281 List<List<Object>> result = new ArrayList<List<Object>>();
285 if(!file.exists()){ 282 if(!file.exists()){
286 - return result; 283 + throw new Exception("Excel["+filepath+"]文件不存在");
287 } 284 }
288 Workbook wb = UtilExcel.getWorkbook(filepath, true); 285 Workbook wb = UtilExcel.getWorkbook(filepath, true);
289 int sheetNumber = wb.getNumberOfSheets(); 286 int sheetNumber = wb.getNumberOfSheets();
290 287
291 - for(int sheetIndex=0; sheetIndex<sheetNumber; ++sheetIndex){ 288 + for(int sheetIndex=0; sheetIndex<sheetNumber; ++sheetIndex){
292 result.addAll(readExcelBySheetIndex(filepath, sheetIndex)); 289 result.addAll(readExcelBySheetIndex(filepath, sheetIndex));
293 } 290 }
294 291
@@ -301,47 +298,40 @@ public class UtilExcel { @@ -301,47 +298,40 @@ public class UtilExcel {
301 */ 298 */
302 public static List<List<Object>> readExcelBySheetIndex(String filepath, int sheetIndex) throws Exception{ 299 public static List<List<Object>> readExcelBySheetIndex(String filepath, int sheetIndex) throws Exception{
303 File file = new File(filepath); 300 File file = new File(filepath);
304 - List<List<Object>> result = new ArrayList<List<Object>>();  
305 if(!file.exists()){ 301 if(!file.exists()){
306 - return result; 302 + throw new Exception("Excel["+filepath+"]文件不存在");
307 } 303 }
308 - Workbook wb = UtilExcel.getWorkbook(filepath, true);  
309 - //创建Excel工作簿对象  
310 - DecimalFormat df = new DecimalFormat("0"); 304 + Workbook wb = UtilExcel.getWorkbook(filepath, true);
311 Sheet sheet = wb.getSheetAt(sheetIndex); 305 Sheet sheet = wb.getSheetAt(sheetIndex);
312 - int start = sheet.getFirstRowNum();  
313 int end = sheet.getLastRowNum(); 306 int end = sheet.getLastRowNum();
314 if(end > UtilExcel.maxExcelRowNum){ 307 if(end > UtilExcel.maxExcelRowNum){
315 throw new Exception("目前系统只支持读取10000行以内记录,您当前Excel行数过大"); 308 throw new Exception("目前系统只支持读取10000行以内记录,您当前Excel行数过大");
316 } 309 }
317 - for(int i=start; i<end+1; ++i){  
318 - Row row = sheet.getRow(i);  
319 - if(row == null){  
320 - continue;  
321 - }  
322 - List<Object> dataRow = new ArrayList<Object>();  
323 - int lastCellNum = row.getLastCellNum();  
324 - if(lastCellNum > UtilExcel.maxExcelColumnNum){  
325 - lastCellNum = UtilExcel.maxExcelColumnNum;  
326 - }  
327 - for(int j=0; j<lastCellNum; ++j){  
328 - try {  
329 - dataRow.add(getCellValue(row.getCell(j), df));  
330 - }catch(Exception e) {  
331 - dataRow.add("");  
332 - e.printStackTrace();  
333 - } 310 + return readExcelBySheet(sheet, UtilExcel.maxExcelRowNum, false);
  311 + }
  312 +
  313 + private static List<List<Object>> readExcelBySheetIndex(Workbook wb, int sheetIndex) throws Exception{
  314 + return readExcelBySheetIndex(wb, sheetIndex, true);
  315 + }
  316 +
  317 + private static List<List<Object>> readExcelBySheetIndex(Workbook wb, int sheetIndex, boolean hasRowLimit) throws Exception{
  318 + Sheet sheet = wb.getSheetAt(sheetIndex);
  319 + int end = sheet.getLastRowNum();
  320 + if(hasRowLimit){
  321 + if(end > UtilExcel.maxExcelRowNum) {
  322 + throw new Exception("目前系统只支持读取10000行以内记录,您当前Excel行数过大");
334 } 323 }
335 - result.add(dataRow); 324 + return readExcelBySheet(sheet, UtilExcel.maxExcelRowNum, false);
  325 + }else {
  326 + return readExcelBySheet(sheet, Integer.MAX_VALUE, false);
336 } 327 }
337 - return result;  
338 } 328 }
339 329
340 /** 330 /**
341 * 读取excel表--当前激活的工作表 331 * 读取excel表--当前激活的工作表
342 * @param path 332 * @param path
343 */ 333 */
344 - public static List<List<Object>> readExcelBySheet(Sheet sheet, int rowLimit) throws Exception{ 334 + private static List<List<Object>> readExcelBySheet(Sheet sheet, int rowLimit, boolean excludeRowZeroHeight) throws Exception{
345 List<List<Object>> result = new ArrayList<List<Object>>(); 335 List<List<Object>> result = new ArrayList<List<Object>>();
346 int start = sheet.getFirstRowNum(); 336 int start = sheet.getFirstRowNum();
347 int end = sheet.getLastRowNum(); 337 int end = sheet.getLastRowNum();
@@ -354,6 +344,10 @@ public class UtilExcel { @@ -354,6 +344,10 @@ public class UtilExcel {
354 if(row == null){ 344 if(row == null){
355 continue; 345 continue;
356 } 346 }
  347 + //去除隐藏行
  348 + if(excludeRowZeroHeight && row.getZeroHeight()){
  349 + continue;
  350 + }
357 List<Object> dataRow = new ArrayList<Object>(); 351 List<Object> dataRow = new ArrayList<Object>();
358 int lastCellNum = row.getLastCellNum(); 352 int lastCellNum = row.getLastCellNum();
359 if(lastCellNum > UtilExcel.maxExcelColumnNum){ 353 if(lastCellNum > UtilExcel.maxExcelColumnNum){
@@ -381,13 +375,11 @@ public class UtilExcel { @@ -381,13 +375,11 @@ public class UtilExcel {
381 if(currCellType.compareTo(CellType.STRING) == 0){ 375 if(currCellType.compareTo(CellType.STRING) == 0){
382 return UtilString.trimCodePage(cell.getRichStringCellValue().getString()); 376 return UtilString.trimCodePage(cell.getRichStringCellValue().getString());
383 }else if(currCellType.compareTo(CellType.NUMERIC) == 0){ 377 }else if(currCellType.compareTo(CellType.NUMERIC) == 0){
384 -  
385 - //if (DateUtil.isCellDateFormatted(cell)) {  
386 if (cell.getCellStyle().getDataFormat()==28||cell.getCellStyle().getDataFormat()==31 || cell.getCellStyle().getDataFormat() == 58) { 378 if (cell.getCellStyle().getDataFormat()==28||cell.getCellStyle().getDataFormat()==31 || cell.getCellStyle().getDataFormat() == 58) {
387 // 如果是date类型则 ,获取该cell的date值 379 // 如果是date类型则 ,获取该cell的date值
388 return new SimpleDateFormat("yyyy-MM-dd").format(DateUtil.getJavaDate(cell.getNumericCellValue())); 380 return new SimpleDateFormat("yyyy-MM-dd").format(DateUtil.getJavaDate(cell.getNumericCellValue()));
389 - } else { // 纯数字  
390 - // return String.valueOf(cell.getNumericCellValue()); 381 + } else {
  382 + // 纯数字
391 return df.format(cell.getNumericCellValue()); 383 return df.format(cell.getNumericCellValue());
392 } 384 }
393 }else if(currCellType.compareTo(CellType.BOOLEAN) == 0){ 385 }else if(currCellType.compareTo(CellType.BOOLEAN) == 0){
@@ -415,114 +407,17 @@ public class UtilExcel { @@ -415,114 +407,17 @@ public class UtilExcel {
415 407
416 public static List<List<Object>> readExcelBySheetIndexExcludeHideLine(String filepath, int sheetIndex) throws Exception{ 408 public static List<List<Object>> readExcelBySheetIndexExcludeHideLine(String filepath, int sheetIndex) throws Exception{
417 File file = new File(filepath); 409 File file = new File(filepath);
418 - List<List<Object>> result = new ArrayList<List<Object>>();  
419 if(!file.exists()){ 410 if(!file.exists()){
420 - return result; 411 + throw new Exception("Excel文件["+filepath+"]不存在");
421 } 412 }
422 - Workbook wb = UtilExcel.getWorkbook(filepath, true);  
423 - //创建Excel工作簿对象  
424 - DecimalFormat df = new DecimalFormat("0"); 413 + Workbook wb = UtilExcel.getWorkbook(filepath, true);
425 Sheet sheet = wb.getSheetAt(sheetIndex); 414 Sheet sheet = wb.getSheetAt(sheetIndex);
426 - int start = sheet.getFirstRowNum();  
427 int end = sheet.getLastRowNum(); 415 int end = sheet.getLastRowNum();
428 if(end > UtilExcel.maxExcelRowNum){ 416 if(end > UtilExcel.maxExcelRowNum){
429 throw new Exception("目前系统只支持读取10000行以内记录,您当前Excel行数过大"); 417 throw new Exception("目前系统只支持读取10000行以内记录,您当前Excel行数过大");
430 } 418 }
431 - for(int i=start; i<end+1; ++i){  
432 - Row row = sheet.getRow(i);  
433 - if(row == null){  
434 - continue;  
435 - }  
436 - //去除隐藏行  
437 - if(row.getZeroHeight()){  
438 - continue;  
439 - }  
440 - List<Object> dataRow = new ArrayList<Object>();  
441 - int lastCellNum = row.getLastCellNum();  
442 - if(lastCellNum > UtilExcel.maxExcelColumnNum){  
443 - lastCellNum = UtilExcel.maxExcelColumnNum;  
444 - }  
445 - for(int j=0; j<lastCellNum; ++j){  
446 - Cell cell = row.getCell(j);  
447 - if(cell != null){  
448 - CellType currCellType = cell.getCellTypeEnum();  
449 -  
450 - if(currCellType.compareTo(CellType.STRING) == 0){  
451 - dataRow.add(UtilString.trimCodePage(cell.getRichStringCellValue().getString()));  
452 - }else if(currCellType.compareTo(CellType.NUMERIC) == 0){  
453 - //if (DateUtil.isCellDateFormatted(cell)) {  
454 - if (cell.getCellStyle().getDataFormat()==28||cell.getCellStyle().getDataFormat()==31 || cell.getCellStyle().getDataFormat() == 58) {  
455 - // 如果是date类型则 ,获取该cell的date值  
456 - dataRow.add( new SimpleDateFormat("yyyy-MM-dd").format(DateUtil.getJavaDate(cell.getNumericCellValue())));  
457 - } else { // 纯数字  
458 - // return String.valueOf(cell.getNumericCellValue());  
459 - dataRow.add( df.format(cell.getNumericCellValue()));  
460 - }  
461 -  
462 - }else if(currCellType.compareTo(CellType.BOOLEAN) == 0){  
463 - dataRow.add(cell.getBooleanCellValue());  
464 - }else if(currCellType.compareTo(CellType.FORMULA) == 0  
465 - || currCellType.compareTo(CellType.BLANK) == 0  
466 - || currCellType.compareTo(CellType.ERROR) == 0){  
467 - dataRow.add("");  
468 - }  
469 -  
470 - }else{  
471 - dataRow.add("");  
472 - }  
473 - }  
474 - result.add(dataRow);  
475 - }  
476 - return result;  
477 - }  
478 -  
479 - public static List<List<Object>> readExcelBySheetExcludeHideLine(Sheet sheet, int rowLimit) throws Exception{  
480 - List<List<Object>> result = new ArrayList<List<Object>>();  
481 - DecimalFormat df = new DecimalFormat("0");  
482 - int start = sheet.getFirstRowNum();  
483 - int end = sheet.getLastRowNum();  
484 - if(end > rowLimit){  
485 - end = rowLimit;  
486 - }  
487 - for(int i=start; i<end+1; ++i){  
488 - Row row = sheet.getRow(i);  
489 - if(row == null){  
490 - continue;  
491 - }  
492 - //去除隐藏行  
493 - if(row.getZeroHeight()){  
494 - continue;  
495 - }  
496 - List<Object> dataRow = new ArrayList<Object>();  
497 - int lastCellNum = row.getLastCellNum();  
498 - if(lastCellNum > UtilExcel.maxExcelColumnNum){  
499 - lastCellNum = UtilExcel.maxExcelColumnNum;  
500 - }  
501 - for(int j=0; j<lastCellNum; ++j){  
502 - Cell cell = row.getCell(j);  
503 - if(cell != null){  
504 - CellType currCellType = cell.getCellTypeEnum();  
505 -  
506 - if(currCellType.compareTo(CellType.STRING) == 0){  
507 - dataRow.add(UtilString.trimCodePage(cell.getRichStringCellValue().getString()));  
508 - }else if(currCellType.compareTo(CellType.NUMERIC) == 0){  
509 - dataRow.add(df.format(cell.getNumericCellValue()));  
510 - }else if(currCellType.compareTo(CellType.BOOLEAN) == 0){  
511 - dataRow.add(cell.getBooleanCellValue());  
512 - }else if(currCellType.compareTo(CellType.FORMULA) == 0  
513 - || currCellType.compareTo(CellType.BLANK) == 0  
514 - || currCellType.compareTo(CellType.ERROR) == 0){  
515 - dataRow.add("");  
516 - }  
517 -  
518 - }else{  
519 - dataRow.add("");  
520 - }  
521 - }  
522 - result.add(dataRow);  
523 - }  
524 - return result;  
525 - } 419 + return readExcelBySheet(sheet, UtilExcel.maxExcelRowNum, true);
  420 + }
526 421
527 public static void main(String args[]){ 422 public static void main(String args[]){
528 //String filepath = "C:\\Users\\root\\Desktop\\千丁-6.27.xlsx"; 423 //String filepath = "C:\\Users\\root\\Desktop\\千丁-6.27.xlsx";