1. 模板标题头,例如

班级名称, 学员名称, 证件号码, 学员状态

2.获取文件 MultipartFile file,校验文件的大小,格式等

public Result<?> importStu(HttpServletRequest request, MultipartFile file, Integer type, HttpSession session, HttpServletResponse response) throws Exception {if (file == null || file.isEmpty()) {return ResultEx.error(Constant.ERROR_CODE, "请选择导入文件;", "");}long fileSize = file.getSize();if (fileSize > Constant.FILE_MAX_SIZE) {return ResultEx.error(Constant.ERROR_CODE, "上传文件超过最大限制,文件最大为" + fileSize +"个字节;10485760=10M", "");}String fileName = file.getOriginalFilename();String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);if (!"xls".equals(suffix) && !"xlsx".equals(suffix)) {return ResultEx.error(Constant.ERROR_CODE, "上传文件只支持xls和xlsx文件后缀;", "");}InputStream fin = file.getInputStream();Workbook wb=null;if ("xls".equals(suffix)) {wb = new HSSFWorkbook(fin);} else if ("xlsx".equals(suffix)) {wb = new XSSFWorkbook(fin);}Map returnMap = new HashMap<>();try {if (null != type ) {if (type == 1) {//导入学生//验证导入学员的标题头是否合法String[] columnName = {"班级名称", "学员名称", "证件号码", "学员状态"};String result = ExcelUtil.verificationStudentExcelHeadLine(wb, columnName);if (result != null) {return ResultEx.error(Constant.ERROR_CODE, result, "");}returnMap = classService.importStudent(wb, session, fin);if (returnMap != null) {String code = (String) returnMap.get("code");if (code != null) {if (code.equals(Consts.REQUEST_SUCCESS)) {return ResultEx.success(returnMap);} else if (code.equals(Consts.REQUEST_EXCEPTION)) {return ResultEx.error(Constant.ERROR_CODE, "导入文件与导出学员的表格表头不一致,无法导入。", "");}}}//return ReturnResult.success(-1, "导入学员成功数" + returnMap.get("sucNum") + ",错误数" + returnMap.get("errNum") + ",请下载错误文件进行修改再次上传");}}} catch (Exception e) {e.printStackTrace();return ResultEx.error(Constant.ERROR_CODE, Constant.ERROR_MSG, "");}return ResultEx.success(returnMap);
}

3.校验上传标题行,代碼中的“4”可以用  columnName.length

/**** 校验导入的学员列表Excel文件标题行是否为标准行*/
public static String verificationStudentExcelHeadLine(Workbook wb, String[] columnName) throws Exception {String result = null;try {Sheet sheet = wb.getSheetAt(0);Row row = sheet.getRow(0);if (row != null && row.getLastCellNum() >= columnName.length) {int lastCellNum = row.getLastCellNum();for (int idx = 0; idx < lastCellNum; idx++) {String value = getCellValue(row.getCell(idx));if (idx < 4) {if (StringUtils.isBlank(value) || !columnName[idx].equals(value)) {result = "标题行第" + (idx + 1) + "列名称错误!";throw new Exception();}} else {if (idx == 4) {if (StringUtils.isBlank(value)) {result = "标题与导出学员的表格表头不一致";throw new Exception();}}}}} else {result = "上传文件首行不能为空或与导出学员的表格表头不一致!";}} catch (Exception ex) {}return result;
}

4.导入内容,将合法数据添加到数据库,非法数据写入错误的集合中。添加数据需手动事务,添加出现异常,需手动事务回滚,部分代码如下

List<Student> errorList = new ArrayList<Student>();
if (数据校验通过) {try {// 手动控制事务HibernateTransactionManager txManager = (HibernateTransactionManager) ctx.getBean("transactionManager");DefaultTransactionDefinition def = new DefaultTransactionDefinition();def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);// 事物隔离级别,开启新事务TransactionStatus txStatus = txManager.getTransaction(def);// 获得事务状态baseDao.saveOne(entity);// 所有处理完成后,提交事务txManager.commit(txStatus);} catch (Exception e){//异常回滚txManager.rollback(txStatus);stu.setErr_msg("数据库服务异常;");errorList.add(stu);errCount++;}
} else {stu.setErr_msg(errorBuffer.toString());errorList.add(stu);errCount++;
}

5.将校验错误数写入,用于下载错误文件

session.setAttribute("errNum", errCount);
session.setAttribute("sucNum", ctList.size()-errCount);
session.setAttribute("total", ctList.size());
//将学员错误列表转json
String studentJson = JsonUtil.toJson(errorList, Include.ALWAYS);
session.setAttribute("studentExcel", studentJson);

注:校验不合法的,将不合法信息写入errorList的最后一列

校验导入的Excel文件标题行与要求的标题行是否一致相关推荐

  1. 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】)...

     本文目录: (一)背景 (二)数据库数据导入到Excel的方法比较    (三)SSIS的简介    (四)数据库中存储过程示例(SSIS应用需要) (五)Excel模板的制作(这步这么简单,稍微介 ...

  2. java导入导出excel文件

    前言:该文章使用java集成poi来操作excel文件,此处只对poi相关api进行代码编写,对于poi的理论性知识,可在学习完这篇文章后,自行百度学习.建议大家跟着文章敲一遍代码. 创建一个mave ...

  3. 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】) 转...

    效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中[附源代码下载])  本文目录: (一)背景 (二)数据库数据导入到Excel的方法比较    ( ...

  4. EOS中如何实现导入导出excel文件

    阅读原文 导入导出excel文件 场景描述 将数据库表中的数据按照定义的EXCEL模板进行导出,下载到本地: 将EXCEL中的数据导入数据库相应的表中. 场景目标 通过本场景,解决EXCEL的导入导出 ...

  5. 导入导出excel文件

    场景描述 将数据库表中的数据按照定义的EXCEL模板进行导出,下载到本地: 将EXCEL中的数据导入数据库相应的表中. 场景目标 通过本场景,解决EXCEL的导入导出问题,供项目中学习使用. 页面效果 ...

  6. 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中)

    转载:http://www.cnblogs.com/jasenkin/archive/2010/10/06/ssis_package_information.html 本文目录: (一)背景 (二)数 ...

  7. EasyExcel 导入导出Excel文件

    文章目录 写在前面 1.maven依赖 2.导入Excel文件 2.1.读取表格文件 2.2.如果有多个sheet表格 2.3.监听器封装(也可不封装) 2.4.读取数据格式化(实体类中添加注解) 3 ...

  8. 【转】 (C#)利用Aspose.Cells组件导入导出excel文件

    Aspose.Cells组件可以不依赖excel来导入导出excel文件: 导入: public static System.Data.DataTable ReadExcel(String strFi ...

  9. 在ASP.NET Core中使用EPPlus导入出Excel文件

    这篇文章说明了如何使用EPPlus在ASP.NET Core中导入和导出.xls/.xlsx文件(Excel).在考虑使用.NET处理excel时,我们总是寻找第三方库或组件.使用Open Offic ...

最新文章

  1. 吴恩达新课发布1天,引3万人观看 | 完整PPT
  2. Dat.gui 使用教程
  3. anime.js 实战:实现一个带有描边动画效果的复选框...
  4. Java反射机制01_反射的概念以及获取字节码信息 的四种方式
  5. mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法
  6. 舒服的网页登录界面设计灵感
  7. 如何使Git使用我选择的编辑器进行提交?
  8. hdu 1312深搜入门题
  9. 复杂纹理复制及纹理叠加效果
  10. 基于Silverlight4开发的相关工具
  11. PHP手机号截取前三位后四位
  12. Android 隐藏程序的图标
  13. Python爬取网易云音乐热评(附源码)
  14. quick-cocos2d-x 绑定C++自定义类
  15. Unity Movetowards方法
  16. 为什么女性朋友容易患上拇外翻?
  17. 八、.net core(.NET 6)配置读取appsettings文件内容的通用功能
  18. 希尔排序----附图解(C语言)
  19. 首师大附中集训第十一天:OI炼金术
  20. 【软件设计师】历年真题-模糊知识点备忘——15年上 上午真题

热门文章

  1. 安卓10开机时间优化分析
  2. seo文案策划的一些日常工作内容
  3. Python怎样提高视频清晰度和对比度?通过这篇直接学会。
  4. hive创建新表——基础
  5. 7-3 地下迷宫探索(30 分)(dfs)
  6. 计算机远程登录不需要密码,win7如何设置远程登录不用输密码-win7远程登录不用输密码的方法 - 河东软件园...
  7. python彩色蟒蛇绘制
  8. git更新项目失败报错 protocol error: bad line length character: Acti
  9. 女性内分泌失调的8种症状
  10. 快递查询方法一键查询物流信息