1.问题描述
在Easyexcel官方文档中也有导入多个sheet的例子,但是该例子是已知两个sheet,这里提供了一下工具类,可以获取导入sheet的个数,进行导入
2.代码实现
2.1 获取sheet个数
public class ExcelImportHelper { /** * 获取excel文件所有sheet页 */ public static List<ReadSheet> listSheet(InputStream inputStream){ if(inputStream == null){ throw new RuntimeException("inputStream is null"); } ExcelReader build = EasyExcel.read(inputStream).build(); List<ReadSheet> readSheets = build.excelExecutor().sheetList(); return readSheets; } }
2.2 进行读取
/** * 多个sheet导入数据 */ public void importPaySlipDataSheet(){ //file创建 (这里的file创建可以看自己的文件如何创建) FileChooser fileChooser = new FileChooser(); fileChooser.setTitle("选择Excel文件"); fileChooser.getExtensionFilters().addAll( new FileChooser.ExtensionFilter("All Excel", "*.xlsx"), new FileChooser.ExtensionFilter("XLS", "*.xls"), new FileChooser.ExtensionFilter("XLSX", "*.xlsx") ); File file = fileChooser.showOpenDialog(borderPane.getScene().getWindow()); if(file != null) { try { FileInputStream inputStream=new FileInputStream(file); List<ReadSheet> readSheets = ExcelImportHelper.listSheet(inputStream); System.out.println(readSheets.size()+"sheet容量"); for (ReadSheet readSheet : readSheets) { readSheetData(file, readSheet); } } catch (IOException e) { e.printStackTrace(); } } } /*** 读数据并进行保存 / private void readSheetData(File file, ReadSheet readSheet) { EasyExcel.read(file, PaySlip.class, new AnalysisEventListener<PaySlip>() { List<PaySlip> paySlipList=new ArrayList<>(); @Override public void invoke(PaySlip paySlip, AnalysisContext analysisContext) { if(paySlip==null || StringUtils.isBlank(paySlip.getCode())){ return ; } //保存数据操作,可以按自己的业务需求 PaySlip payS=new PaySlip(); payS.setCode(paySlip.getCode()); payS.setName(paySlip.getName()); if (StringUtils.isBlank(paySlip.getDate())) { payS.setYear_(year.getValue()); payS.setMonth_(month.getValue()); } else { String[] arr = paySlip.getDate().replace("月", "").split("年"); payS.setYear_(Integer.parseInt(arr[0])); payS.setMonth_(Integer.parseInt(arr[1])); } payS.setId(String.format("%d-%d-%s", payS.getYear_(), payS.getMonth_(), payS.getCode())); paySlipList.add(payS); } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { paySlipService.saveOrUpdateBatch(paySlipList); } }).sheet(readSheet.getSheetNo()).doRead(); }