Commit 626d93d1c378d047c49bd9f2c795ce4509a8c32a
1 parent
45a966ad
Exists in
master
ExcelUtil 增加行数限制与不限制接口
Showing
2 changed files
with
38 additions
and
143 deletions
Show diff stats
build.gradle
src/main/java/com/taover/util/UtilExcel.java
| ... | ... | @@ -237,26 +237,24 @@ public class UtilExcel { |
| 237 | 237 | */ |
| 238 | 238 | public static List<List<Object>> readExcel(String filepath) throws Exception{ |
| 239 | 239 | File file = new File(filepath); |
| 240 | - List<List<Object>> result = new ArrayList<List<Object>>(); | |
| 241 | 240 | if(!file.exists()){ |
| 242 | - return result; | |
| 241 | + throw new Exception("Excel["+filepath+"]文件不存在"); | |
| 243 | 242 | } |
| 244 | 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 | 248 | * 读取excel表--当前激活的工作表 |
| 250 | 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 | 252 | File file = new File(filepath); |
| 254 | - List<List<Object>> result = new ArrayList<List<Object>>(); | |
| 255 | 253 | if(!file.exists()){ |
| 256 | - return result; | |
| 254 | + throw new Exception("Excel["+filepath+"]文件不存在"); | |
| 257 | 255 | } |
| 258 | 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 | 265 | */ |
| 268 | 266 | public static List<List<Object>> readExcelExcludeHideLine(String filepath) throws Exception{ |
| 269 | 267 | File file = new File(filepath); |
| 270 | - List<List<Object>> result = new ArrayList<List<Object>>(); | |
| 271 | 268 | if(!file.exists()){ |
| 272 | - return result; | |
| 269 | + throw new Exception("Excel["+filepath+"]文件不存在"); | |
| 273 | 270 | } |
| 274 | 271 | Workbook wb = UtilExcel.getWorkbook(filepath, true); |
| 275 | 272 | return readExcelBySheetIndexExcludeHideLine(filepath, wb.getActiveSheetIndex()); |
| ... | ... | @@ -283,12 +280,12 @@ public class UtilExcel { |
| 283 | 280 | File file = new File(filepath); |
| 284 | 281 | List<List<Object>> result = new ArrayList<List<Object>>(); |
| 285 | 282 | if(!file.exists()){ |
| 286 | - return result; | |
| 283 | + throw new Exception("Excel["+filepath+"]文件不存在"); | |
| 287 | 284 | } |
| 288 | 285 | Workbook wb = UtilExcel.getWorkbook(filepath, true); |
| 289 | 286 | int sheetNumber = wb.getNumberOfSheets(); |
| 290 | 287 | |
| 291 | - for(int sheetIndex=0; sheetIndex<sheetNumber; ++sheetIndex){ | |
| 288 | + for(int sheetIndex=0; sheetIndex<sheetNumber; ++sheetIndex){ | |
| 292 | 289 | result.addAll(readExcelBySheetIndex(filepath, sheetIndex)); |
| 293 | 290 | } |
| 294 | 291 | |
| ... | ... | @@ -301,47 +298,40 @@ public class UtilExcel { |
| 301 | 298 | */ |
| 302 | 299 | public static List<List<Object>> readExcelBySheetIndex(String filepath, int sheetIndex) throws Exception{ |
| 303 | 300 | File file = new File(filepath); |
| 304 | - List<List<Object>> result = new ArrayList<List<Object>>(); | |
| 305 | 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 | 305 | Sheet sheet = wb.getSheetAt(sheetIndex); |
| 312 | - int start = sheet.getFirstRowNum(); | |
| 313 | 306 | int end = sheet.getLastRowNum(); |
| 314 | 307 | if(end > UtilExcel.maxExcelRowNum){ |
| 315 | 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 | 331 | * 读取excel表--当前激活的工作表 |
| 342 | 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 | 335 | List<List<Object>> result = new ArrayList<List<Object>>(); |
| 346 | 336 | int start = sheet.getFirstRowNum(); |
| 347 | 337 | int end = sheet.getLastRowNum(); |
| ... | ... | @@ -354,6 +344,10 @@ public class UtilExcel { |
| 354 | 344 | if(row == null){ |
| 355 | 345 | continue; |
| 356 | 346 | } |
| 347 | + //去除隐藏行 | |
| 348 | + if(excludeRowZeroHeight && row.getZeroHeight()){ | |
| 349 | + continue; | |
| 350 | + } | |
| 357 | 351 | List<Object> dataRow = new ArrayList<Object>(); |
| 358 | 352 | int lastCellNum = row.getLastCellNum(); |
| 359 | 353 | if(lastCellNum > UtilExcel.maxExcelColumnNum){ |
| ... | ... | @@ -381,13 +375,11 @@ public class UtilExcel { |
| 381 | 375 | if(currCellType.compareTo(CellType.STRING) == 0){ |
| 382 | 376 | return UtilString.trimCodePage(cell.getRichStringCellValue().getString()); |
| 383 | 377 | }else if(currCellType.compareTo(CellType.NUMERIC) == 0){ |
| 384 | - | |
| 385 | - //if (DateUtil.isCellDateFormatted(cell)) { | |
| 386 | 378 | if (cell.getCellStyle().getDataFormat()==28||cell.getCellStyle().getDataFormat()==31 || cell.getCellStyle().getDataFormat() == 58) { |
| 387 | 379 | // 如果是date类型则 ,获取该cell的date值 |
| 388 | 380 | return new SimpleDateFormat("yyyy-MM-dd").format(DateUtil.getJavaDate(cell.getNumericCellValue())); |
| 389 | - } else { // 纯数字 | |
| 390 | - // return String.valueOf(cell.getNumericCellValue()); | |
| 381 | + } else { | |
| 382 | + // 纯数字 | |
| 391 | 383 | return df.format(cell.getNumericCellValue()); |
| 392 | 384 | } |
| 393 | 385 | }else if(currCellType.compareTo(CellType.BOOLEAN) == 0){ |
| ... | ... | @@ -415,114 +407,17 @@ public class UtilExcel { |
| 415 | 407 | |
| 416 | 408 | public static List<List<Object>> readExcelBySheetIndexExcludeHideLine(String filepath, int sheetIndex) throws Exception{ |
| 417 | 409 | File file = new File(filepath); |
| 418 | - List<List<Object>> result = new ArrayList<List<Object>>(); | |
| 419 | 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 | 414 | Sheet sheet = wb.getSheetAt(sheetIndex); |
| 426 | - int start = sheet.getFirstRowNum(); | |
| 427 | 415 | int end = sheet.getLastRowNum(); |
| 428 | 416 | if(end > UtilExcel.maxExcelRowNum){ |
| 429 | 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 | 422 | public static void main(String args[]){ |
| 528 | 423 | //String filepath = "C:\\Users\\root\\Desktop\\千丁-6.27.xlsx"; | ... | ... |