校验导入的Excel文件标题行与要求的标题行是否一致
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文件标题行与要求的标题行是否一致相关推荐
- 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】)...
本文目录: (一)背景 (二)数据库数据导入到Excel的方法比较 (三)SSIS的简介 (四)数据库中存储过程示例(SSIS应用需要) (五)Excel模板的制作(这步这么简单,稍微介 ...
- java导入导出excel文件
前言:该文章使用java集成poi来操作excel文件,此处只对poi相关api进行代码编写,对于poi的理论性知识,可在学习完这篇文章后,自行百度学习.建议大家跟着文章敲一遍代码. 创建一个mave ...
- 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】) 转...
效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中[附源代码下载]) 本文目录: (一)背景 (二)数据库数据导入到Excel的方法比较 ( ...
- EOS中如何实现导入导出excel文件
阅读原文 导入导出excel文件 场景描述 将数据库表中的数据按照定义的EXCEL模板进行导出,下载到本地: 将EXCEL中的数据导入数据库相应的表中. 场景目标 通过本场景,解决EXCEL的导入导出 ...
- 导入导出excel文件
场景描述 将数据库表中的数据按照定义的EXCEL模板进行导出,下载到本地: 将EXCEL中的数据导入数据库相应的表中. 场景目标 通过本场景,解决EXCEL的导入导出问题,供项目中学习使用. 页面效果 ...
- 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中)
转载:http://www.cnblogs.com/jasenkin/archive/2010/10/06/ssis_package_information.html 本文目录: (一)背景 (二)数 ...
- EasyExcel 导入导出Excel文件
文章目录 写在前面 1.maven依赖 2.导入Excel文件 2.1.读取表格文件 2.2.如果有多个sheet表格 2.3.监听器封装(也可不封装) 2.4.读取数据格式化(实体类中添加注解) 3 ...
- 【转】 (C#)利用Aspose.Cells组件导入导出excel文件
Aspose.Cells组件可以不依赖excel来导入导出excel文件: 导入: public static System.Data.DataTable ReadExcel(String strFi ...
- 在ASP.NET Core中使用EPPlus导入出Excel文件
这篇文章说明了如何使用EPPlus在ASP.NET Core中导入和导出.xls/.xlsx文件(Excel).在考虑使用.NET处理excel时,我们总是寻找第三方库或组件.使用Open Offic ...
最新文章
- 吴恩达新课发布1天,引3万人观看 | 完整PPT
- Dat.gui 使用教程
- anime.js 实战:实现一个带有描边动画效果的复选框...
- Java反射机制01_反射的概念以及获取字节码信息 的四种方式
- mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法
- 舒服的网页登录界面设计灵感
- 如何使Git使用我选择的编辑器进行提交?
- hdu 1312深搜入门题
- 复杂纹理复制及纹理叠加效果
- 基于Silverlight4开发的相关工具
- PHP手机号截取前三位后四位
- Android 隐藏程序的图标
- Python爬取网易云音乐热评(附源码)
- quick-cocos2d-x 绑定C++自定义类
- Unity Movetowards方法
- 为什么女性朋友容易患上拇外翻?
- 八、.net core(.NET 6)配置读取appsettings文件内容的通用功能
- 希尔排序----附图解(C语言)
- 首师大附中集训第十一天:OI炼金术
- 【软件设计师】历年真题-模糊知识点备忘——15年上 上午真题