hutool工具实现导出导入功能
1、导出
@RequestMapping("/export") public void export1(HttpServletResponse response){ List<UserEntity> list = new ArrayList<>(); //传入数据 List<UserEntity> userEntityList = userService.list(); for (UserEntity user : userEntityList) { UserEntity obj = new UserEntity(); obj.setId(user.getId()); obj.setName(user.getName()); obj.setEmail(user.getEmail()); obj.setMobile(user.getMobile()); obj.setStatus (user.getStatus()); obj.setDeptId(user.getDeptId()); obj.setCreateBy(user.getCreateBy()); obj.setCreateTime(user.getCreateTime()); obj.setLastUpdateBy(user.getLastUpdateBy()); obj.setLastUpdateTime(user.getLastUpdateTime()); obj.setDelFlag(user.getDelFlag()); list.add(obj); } // 1.创建ExcelWriter // 通过工具类创建writer,默认创建xls格式 ExcelWriter writer = ExcelUtil.getWriter(); writer.renameSheet(0, "用户记录"); //创建工作表 //创建xlsx格式的 //ExcelWriter writer = ExcelUtil.getWriter(true); // 2.设置一级标题 // 合并单元格后的标题行,使用默认标题样式,从0开始 // 设置表头高度 writer.setRowHeight(0, 25); // 3.设置二级标题 writer.addHeaderAlias("id", "编号"); writer.addHeaderAlias("name", "用户名"); writer.addHeaderAlias("email", "邮箱"); writer.addHeaderAlias("mobile", "手机号"); writer.addHeaderAlias("status", "状态 0:禁用 1:正常"); writer.addHeaderAlias("deptId", "机构ID"); writer.addHeaderAlias("createBy", "创建人"); writer.addHeaderAlias("createTime", "创建时间"); writer.addHeaderAlias("lastUpdateBy", "更新人"); writer.addHeaderAlias("lastUpdateTime", "更新时间"); writer.addHeaderAlias("delFlag", "是否删除 -1:已删除 0:正常"); // 4.设置表头字体 // 获取表头样式,获取样式后可自定义样式 CellStyle headCellStyle = writer.getHeadCellStyle(); // 获取单元格样式 // CellStyle cellStyle = excelWriter.getCellStyle(); // 设置内容字体 Font font = writer.createFont(); // 设置字体 font.setFontName("宋体"); // 设置字体大小 font.setFontHeightInPoints((short) 14); // 字体加粗 font.setBold(true); // 字体颜色 font.setColor(Font.SS_NONE); headCellStyle.setFont(font); // 5.设置单元格宽度 int[] arr = {30, 30, 25}; for (int i = 0; i < arr.length; i++) { writer.setColumnWidth(i, arr[i]); } writer.merge(list.size()-2, "员工信息表"); // 只导出有别名的字段 writer.setOnlyAlias(true); // 一次性写出内容,使用默认样式,强制输出标题 writer.write(list, true); // 从第几行写入 // excelWriter.setCurrentRow(1); // excelWriter.writeRow(data()); // 设置某个单元格的样式 // CellStyle orCreateCellStyle = excelWriter.getOrCreateCellStyle(0, 1); // 设置某行的样式 // excelWriter.setRowStyle(); ServletOutputStream out = null; SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { String fileName = URLEncoder.encode(dateFormat.format(new Date())+"用户信息表" , StandardCharsets.UTF_8.name()); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); out = response.getOutputStream(); // 将Excel Workbook刷出到输出流 writer.flush(out, true); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException("文件写入失败!"); } finally { // 记住关流 IoUtil.close(writer); IoUtil.close(out); } }
2、导入
/** * 专家信息导入 * @return */ @RequestMapping("/ImportExpert") public ActionResult ImportExpert(@RequestParam("file") MultipartFile file){ SsSysDepartment sysDepartment = UserInfo.getSysDepartment(); // 1.获取上传文件输入流 InputStream inputStream = null; ExcelReader excelReader = null; try { if (file.isEmpty()) { return apiErrorReturn("文件为空!"); } inputStream = file.getInputStream(); //调用hutool方法读取数据,默认调用第一个sheet excelReader = ExcelUtil.getReader(inputStream); // 从第二行开始获取数据,excelReader.read的结果是一个两维的list,外层是行,内层是行对应的所有列 List<List<Object>> read = excelReader.read(1, excelReader.getRowCount());
// 循环获取的数据
for (int i = 0; i < read.size(); i++) {
try {
//region 取出变量
List list =read.get(i);
String name = list.get(0).toString();//姓名
String czd = list.get(1).toString();//常驻地
String zjlx_1 = list.get(2).toString();//专家类型1
String pspm_1 = list.get(3).toString();//专家类型1评审品目
String djlx_1 = list.get(4).toString();//专家类型1来源
String zjlx_2 = list.get(5).toString();//专家类型2
String pspm_2 = list.get(6).toString();//专家类型2评审品目
String djlx_2 = list.get(7).toString();//专家类型2来源
String phone = AesEncryptHelper.AesEncryptSingle(list.get(8).toString(),AesSecrect);;//手机号码
String iscq = list.get(9).toString();//是否可抽取
String ishmd = list.get(10).toString();//是否黑名单,0-否,1-是
String sex = list.get(11).toString();//性别
String idcardtype = list.get(12).toString();//证件类型
String idcard = list.get(13).toString();//证件号码
String zzqk = list.get(14).toString();//在职情况
String company = list.get(15).toString();//工作单位
String aviodunit = list.get(16).toString();//需要回避的其他单位
String zczy = list.get(17).toString();//职称专业
String zclevel = list.get(18).toString();//职称级别
String zcdate = list.get(19).toString();//职称有效期
....dosoming
} catch (Exception e) {
}
}
if(StringUtils.isNotEmpty(errorMsg)){ return apiErrorReturn(errorMsg); } return apiSuccessReturn("导入成功!"); } catch (Exception e) { e.printStackTrace(); log.error("专家信息导入失败:{}",e.getMessage()); }finally { try { if(inputStream!=null){ inputStream.close(); } } catch (IOException e) { e.printStackTrace(); } if(excelReader!=null){ excelReader.close(); } } return apiErrorReturn("专家信息导入失败"); }
吾乃代码搬运工,侵联删
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了