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("专家信息导入失败"); }
吾乃代码搬运工,侵联删
浙公网安备 33010602011771号