有了这个开源工具后,我五点就下班了( 二 )

list = exportData.get(itemIndex);WriteSheet sheet = EasyExcel.writerSheet(itemIndex, CollUtil.isEmpty(sheetNames) ? ExportConstant.SHEET_NAME + itemIndex + 1 : sheetNames.get(itemIndex)).head(headData.getClass()).build();writer.write(list, sheet);}} catch (Exception e) {log.error("ExcelExportUtil exportFile in error:{}", e);} finally {if (null != writer) {writer.finish();}}}  「使用案例如下(在工具中每个项目都有具体的案例,不懂的还可以留言跟博主沟通):」
/*** 导入用户数据案例** @param file*/@Transactional(rollbackFor = Exception.class)public void uploadUserListDemoWithExcel(MultipartFile file, String username) throws Exception {// 此处先校验导入的文件类型是否为excelString type = FileTypeUtil.getType(file.getInputStream());if (StrUtil.isBlank(type) || type.contains(ImportConstant.XLS_TYPE) || type.contains(ImportConstant.XLSX_TYPE)) {// 返回校验失败信息return;}User user = new User();user.setId(100);user.setName("外层");user.setPassword("外层");userService.save(user);// 调用统一导入方法ExcelImportUtil.importFile(file.getInputStream(), new UserDto(), UserServiceImpl::saveUserList);} /*** 导出案例** @param response*/public void exportUserListDemoWithExcel(HttpServletResponse response) {// 表头(使用excel中的注解定义,如果表头不固定,请使用ExcelExportUtil.exportWithDynamicData进行导出)List<UserExportVo> head = Stream.of(new UserExportVo()).collect(Collectors.toList());// 数据(使用两层list为了兼容多个sheet页,如果是不同的sheet页则放在不同的List集合中)List<List<UserExportVo>> exportDataList = new ArrayList<>();List<UserExportVo> exportItem = new ArrayList<>();// 查询数据List<User> dbData = https://www.isolves.com/it/cxkf/ky/else/2022-08-09/userService.list();// 将数据转换成导出需要的实际数据格式,此处只是演示for (User user : dbData) {UserExportVo vo = new UserExportVo();BeanUtil.copyProperties(user, vo);exportItem.add(vo);}exportDataList.add(exportItem);// sheet页名称-自定义,如果没有则传空List sheetNameList = Stream.of("sheet1").collect(Collectors.toList());ExcelExportUtil.exportFile("user", head, exportDataList, sheetNameList, response);}二、csv工具  Csv即逗号分隔值,也可以称为字符分隔符,「与excel等文件相比,excel文件中会包含许多格式信息,占用的空间会更大,所以Csv在很多大数据场景导出、导入场景是非常常见的 。该工具实现采用的是开源的univocity-parsers框架实现 。」
  之前有一篇专门讲解轮子之王项目为何使用univocity-parsers框架集成csv的详细过程,有兴趣的读者可以点击链接查看:集成csv工具的前因后果
  「部分源码如下:」
/*** 使用实体bean接收csv数据文件并进行数据落盘** @param inputStream* @param errorList* @param rowDtoClass* @param rowAction* @param <T>*/public static <T> void importCsvWithBean(InputStream inputStream, List<String> errorList, Class rowDtoClass, ThrowingConsumer<List<T>> rowAction) {// 定义bean解析者:用于将csv中数据绑定到实体属性中,然后存储带list集合上BeanListProcessor<T> rowProcessor = new BeanListProcessor<>(rowDtoClass);CsvParserSettings setting = getDefaultSetting(errorList);setting.setProcessor(rowProcessor);// 创建csv文件解析CsvParser csvParser = new CsvParser(setting);csvParser.parse(inputStream);// 获取数据映射后的集合List<T> dataList = rowProcessor.getBeans();// 校验必填字段for (T row : dataList) {// 校验导入字段ImportValid.validRequireField(row, errorList);}// 执行数据持久化persistentBeanDataToDb(dataList, rowAction);}/*** 导出csv文件(表头和行都以实体的方式)** @param response* @param head* @param rowDataList*/public static <T> void exportCsvWithBean(HttpServletResponse response, String fileName, T head, List<T> rowDataList) {CsvWriter writer = null;try {// 设置响应头格式response.setContentType(ExportConstant.EXCEL_CONTENT_TYPE);response.setCharacterEncoding(ExportConstant.UTF_8);response.setHeader(ExportConstant.CONTENT_DISPOSITION, ExportConstant.ATTACHMENT_FILENAME + fileName + ExportConstant.CSV_SUFFIX);// 设置导出格式CsvWriterSettings setting = getDefaultWriteSetting();// 创见bean处理器,用于处理写入数据BeanWriterProcessor<?> beanWriter = new BeanWriterProcessor<>(head.getClass());setting.setRowWriterProcessor(beanWriter);// 导出数据writer = new CsvWriter(response.getOutputStream(), setting);writer.processRecords(rowDataList);writer.flush();} catch (Exception e) {log.error("CsvExportUtil exportCsvWithBean in error:{}", e);} finally {if (Objects.nonNull(writer)) {writer.close();}}}   「使用案例如下:」
/*** 导出案例** @param response*/public void exportUserListWithCsv(HttpServletResponse response) {List<UserExportCsvVo> exportItem = new ArrayList<>();// 查询数据List<User> dbData = https://www.isolves.com/it/cxkf/ky/else/2022-08-09/userService.list();// 使用字符串数组方式作为表头导出csv数据List


推荐阅读