Commit 626d93d1c378d047c49bd9f2c795ce4509a8c32a
1 parent
45a966ad
Exists in
master
ExcelUtil 增加行数限制与不限制接口
Showing
2 changed files
with
38 additions
and
143 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.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"; |