// 导入excel中的数据到数据库中@PostMapping(value = "importHDangerRecord")@Overridepublic RestMessage importHDangerRecord(@RequestParam("file") MultipartFile file) {try {// 隐患分类 隐患级别 隐患描述 报告时间  隐患报告人String qyid = UserUtil.getCurrQyId();
//            String userid = UserUtil.getCurrUserId();
//            SeUser user = userFeign.getUserById(userid).getData();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");StringBuilder errorMsg = new StringBuilder("");List<Hiddendanger> res = new ArrayList<>();Map<Integer, String> map = ImportExcelUtil.getDataFromExcel(file);if(map.size()>1){for (Map.Entry<Integer, String> entry : map.entrySet()) {if (entry.getKey() > 1) {Integer row = entry.getKey()+1;String[] s = entry.getValue().split("#&");Hiddendanger hiddendanger = new Hiddendanger();//企业idTbQybaseinfo qyInfo = userFeign.getQyByUserId(UserUtil.getCurrUserId()).getData();
//                        hiddendanger.beforeInsert();
//                        hiddendanger.setQyid(qyInfo.getId());
//                        hiddendanger.setQyname(qyInfo.getName());
//                        hiddendanger.setZygsid(qyInfo.getZygsid());
//                        hiddendanger.setSybid(qyInfo.getSybid());//隐患分类if(StringUtils.isNoneBlank(s[0]) && StringUtils.isNoneBlank(s[1])) {Thirtytwoelements firstCategory = hDangerService.getFirstCategory(s[0]);if(firstCategory != null && StringUtils.isNoneBlank(firstCategory.getId())){Thirtytwoelements secondCategoryCategory = hDangerService.getSecondCategory(s[1],firstCategory.getId());if(secondCategoryCategory != null){hiddendanger.setCategory(secondCategoryCategory.getId());hiddendanger.setCatecode(secondCategoryCategory.getCode());hiddendanger.setCategoryname(secondCategoryCategory.getName());}else{errorMsg.append("第" + row + "行隐患分类有误 \n");}}else{errorMsg.append("第" + row + "行隐患分类有误 \n");}}else {errorMsg.append("第" + row + "行隐患分类为空 \n");}//隐患级别if(StringUtils.isNoneBlank(s[2])) {RestMessage<TbDicItem> rm = userFeign.getItemByNameFieldCode(s[2], "DANGER_YHDJ");TbDicItem item = rm.getData();if(item != null){hiddendanger.setLevel(item.getId());hiddendanger.setLevelcode(item.getCode());hiddendanger.setLevelname(item.getName());}else{errorMsg.append("第" + row + "行隐患等级有误 \n");}}else {errorMsg.append("第" + row + "行隐患等级为空 \n");}//隐患描述if(StringUtils.isNoneBlank(s[3])) {hiddendanger.setDescribe(s[3]);}else {errorMsg.append("第" + row + "行隐患描述为空 \n");}//隐患报告时间if(StringUtils.isNoneBlank(s[4])) {if(isValidDate(s[4])){hiddendanger.setReporttime(s[4]);}else {errorMsg.append("第" + row + "行隐患报告时间格式有误   请按照 \" yyyy-MM-dd\" 格式填写 \n");}}else {errorMsg.append("第" + row + "行隐患报告时间为空 \n");}//隐患报告人
//                    hiddendanger.setReportUsername(user.getRealname());
//                    hiddendanger.setReportUser(userid);if(StringUtils.isNoneBlank(s[5])) {SeUser seUser = userFeign.getUserByEmail(s[5]).getData();if(seUser != null){hiddendanger.setReportUser(seUser.getId());hiddendanger.setReportUsername(seUser.getRealname());TbQybaseinfo qybaseinfo = userFeign.getQyById(seUser.getQyId()).getData();if(qybaseinfo.getHierarchy() == ConstantCode.DW){hiddendanger.setHiddenSource(1);hiddendanger.setQyid(qybaseinfo.getId());hiddendanger.setQyname(qybaseinfo.getName());hiddendanger.setZygsid(qybaseinfo.getZygsid());hiddendanger.setSybid(qybaseinfo.getSybid());hiddendanger.setReportlevel(1);}else if(qybaseinfo.getHierarchy() == ConstantCode.ZYGS){hiddendanger.setHiddenSource(2);hiddendanger.setReportlevel(2);hiddendanger.setQyid(qybaseinfo.getId());hiddendanger.setQyname(qybaseinfo.getName());if(StringUtils.isNoneBlank(qybaseinfo.getZygsid())){hiddendanger.setZygsid(qybaseinfo.getZygsid());}else {hiddendanger.setZygsid(qybaseinfo.getId());}hiddendanger.setSybid(qybaseinfo.getSybid());}}else {errorMsg.append("第" + row + "行隐患报告人邮箱参数有误 \n");}}else {errorMsg.append("第" + row + "行隐患报告人邮箱为空 \n");}res.add(hiddendanger);}}}else{errorMsg.append("导入模板为空 \n");}if (errorMsg.length() <= 0) {for (Hiddendanger hiddendanger: res) {hiddendanger.beforeInsert();hDangerService.addHDanger(hiddendanger);}return new RestMessage();} else {return new RestMessage(0, errorMsg.toString());}}catch (Exception e) {e.printStackTrace();return new RestMessage(RespCodeAndMsg.FAIL);}}

/**
*
*/
package com.zhjt.utils;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;/*** @ClassName: ImportExcel**/
public class ImportExcelUtil {/*** 读取出filePath中的所有数据信息* @param filePath excel文件的绝对路径**//*** @Description //TODO 读取excel数据到map集合,key为行号,value为本行每列拼接内容。* @Param [filePath]* @return java.util.Map<java.lang.Integer, java.lang.String>**/public static Map<Integer, String> getDataFromExcel(MultipartFile filePath) {//判断是否为excel类型文件if (!filePath.getOriginalFilename().endsWith(".xls") && !filePath.getOriginalFilename().endsWith(".xlsx")) {throw new IllegalArgumentException("文件不是excel类型");}InputStream fis = null;Workbook wookbook = null;try {//获取一个绝对地址的流fis = filePath.getInputStream();} catch (Exception e) {e.printStackTrace();}try {//2003版本的excel,用.xls结尾wookbook = new HSSFWorkbook(fis);//得到工作簿} catch (Exception ex) {//ex.printStackTrace();try {//这里需要重新获取流对象,因为前面的异常导致了流的关闭—————————————————————————————加了这一行fis = filePath.getInputStream();//2007版本及更高的excel,用.xlsx结尾wookbook = new XSSFWorkbook(fis);//得到工作簿} catch (IOException e) {e.printStackTrace();}}//得到一个工作表Sheet sheet = wookbook.getSheetAt(0);//获得数据的总行数int totalRowNum = sheet.getLastRowNum();if (0 == totalRowNum) {throw new IllegalArgumentException("Excel内没有数据!");}//读取表格数据StringBuilder str = new StringBuilder();Map<Integer, String> content = new HashMap<Integer, String>();//模板文件默认前两行为表名和表头,正式数据从第三行开始Row row = sheet.getRow(1);int rowNum = sheet.getLastRowNum();int colNum = row.getLastCellNum();for (int i = 1; i <= rowNum; i++) {str = new StringBuilder();row = sheet.getRow(i);if(row!=null){int j = 0;while (j < colNum) {if (getCellFormatValue(row.getCell(j)) != null && !"".equals(getCellFormatValue(row.getCell(j)))) {//避免时间格式产生混乱,不再使用"/"与"-",使用#&分开str.append(getCellFormatValue(row.getCell(j)) + "#&");} else {str.append(" " + "#&");}j++;}content.put(i, str.substring(0, str.length() - 2).toString());}}closeQuietly(fis);return content;}public static void closeQuietly(Closeable closeable) {try {if (closeable != null) closeable.close();} catch (IOException ioe) {// ignore}}public static String getCellFormatValue(Cell cell) {String cellvalue = "";if (cell != null) {// 判断当前Cell的Typeswitch (cell.getCellType()) {// 如果当前Cell的Type为NUMERICcase HSSFCell.CELL_TYPE_BOOLEAN:cellvalue = String.valueOf(cell.getBooleanCellValue());break;case HSSFCell.CELL_TYPE_BLANK:cellvalue = "";break;case HSSFCell.CELL_TYPE_NUMERIC:case HSSFCell.CELL_TYPE_FORMULA: {// 判断当前的cell是否为Dateif (HSSFDateUtil.isCellDateFormatted(cell)) {// 如果是Date类型则,默认yyyy-mm-ddDate date = cell.getDateCellValue();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");cellvalue = sdf.format(date);}// 如果是纯数字else {// 取得当前Cell的数值DecimalFormat df = new DecimalFormat("#.#########");cellvalue = df.format(cell.getNumericCellValue()).toString();}break;}// 如果当前Cell的Type为STRINcase HSSFCell.CELL_TYPE_STRING:// 取得当前的Cell字符串cellvalue = cell.getRichStringCellValue().getString();break;// 默认的Cell值default:cellvalue = " ";}} else {cellvalue = "";}return cellvalue;}/*** 一对多导入(例:接触职业病危害人员信息)* @return*/public static Map<String,Map<Integer, String>> getOneToManyDataFromExcel(MultipartFile filePath) {//判断是否为excel类型文件if (!filePath.getOriginalFilename().endsWith(".xls") && !filePath.getOriginalFilename().endsWith(".xlsx")) {throw new IllegalArgumentException("文件不是excel类型");}InputStream fis = null;Workbook wookbook = null;try {//获取一个绝对地址的流fis = filePath.getInputStream();} catch (Exception e) {e.printStackTrace();}try {//2003版本的excel,用.xls结尾wookbook = new HSSFWorkbook(fis);//得到工作簿} catch (Exception ex) {//ex.printStackTrace();try {//这里需要重新获取流对象,因为前面的异常导致了流的关闭—————————————————————————————加了这一行fis = filePath.getInputStream();//2007版本及更高的excel,用.xlsx结尾wookbook = new XSSFWorkbook(fis);//得到工作簿} catch (IOException e) {e.printStackTrace();}}Map<String,Map<Integer, String>> map=new HashMap<>();for (int  n= 0; n< wookbook.getNumberOfSheets(); n++) {//获取Sheet表个数//得到一个工作表Sheet sheet = wookbook.getSheetAt(n);//获得数据的总行数int totalRowNum = sheet.getLastRowNum();if (0 == totalRowNum) {throw new IllegalArgumentException("Excel内没有数据!");}//读取表格数据StringBuilder str = new StringBuilder();Map<Integer, String> content = new HashMap<Integer, String>();//模板文件默认前两行为表名和表头,正式数据从第三行开始Row row = sheet.getRow(1);int rowNum = sheet.getLastRowNum();int colNum = row.getLastCellNum();for (int i = 1; i <= rowNum; i++) {str = new StringBuilder();row = sheet.getRow(i);if(row!=null){int j = 0;while (j < colNum) {if (getCellFormatValue(row.getCell(j)) != null && !"".equals(getCellFormatValue(row.getCell(j)))) {//避免时间格式产生混乱,不再使用"/"与"-",使用#&分开str.append(getCellFormatValue(row.getCell(j)) + "#&");} else {str.append(" " + "#&");}j++;}content.put(i, str.substring(0, str.length() - 2).toString());}}if(n==0){map.put("zhubiao",content);}else{map.put("zibiao"+n,content);}}closeQuietly(fis);return map;}
}

excel 数据导入(附工具类)相关推荐

  1. Java操作百万数据量Excel导入导出工具类(程序代码教程)

    Java操作百万数据量Excel导入导出工具类(程序代码教程): # 功能实现1.自定义导入数据格式,支持配置时间.小数点类型(支持单/多sheet)(2种方式:本地文件路径导入(只支持xls.xls ...

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

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

  3. 一个基于POI的通用excel导入导出工具类的简单实现及使用方法

    前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴. ...

  4. java Excel导入导出工具类 及使用demo

    java Excel导入导出工具类 及使用demo 前言:相信进来的都是想尽快解决问题的,话不多说,按照以下步骤来,可以操作导出excel到本地,导入同理,自行学习.步骤一:直接复制以下excel工具 ...

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

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

  6. 利用SQLite Expert 工具将Excel数据导入android数据库.db文件

    1.打开Excel,建立一张表.第一行(主键)一定要设置为id  2. 保存为CSV格式. 3.右键打开方式选择记事本打开我们新建的book.csv.将编码改为UTF-8,防止在模拟器上运行发生文字乱 ...

  7. Excel和Word 简易工具类,JEasyPoi 2.1.5 版本发布

    Excel和Word 简易工具类,JEasyPoi 2.1.5 版本发布 摘要: jeasypoi 功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导 ...

  8. java自定义注解实现excel数据导入导出,设置单元格数据验证与生成省市区多列联动效果

    本文通过自定义注解实现excel数据导入导出.以及设置excel文件中列数据验证,即用户在excel文件中输入数据时就可以对数据格式验证是否符合,节省了程序中过多的数据验证操作,注解还额外提供了一系列 ...

  9. Java带图片的excel数据导入

    带图片的EXCEL数据导入 这里使用的是POI,所以这里使用的很杂,不过方便对它们的了解.模板下载与图片导出到excel都不一样. 下面会把对应连接贴上. 带入依赖:不要使用3.17的版本,直接上代码 ...

  10. 利用若依@Excel注解导出PDF工具类

    利用若依@Excel注解导出PDF工具类 1.pom依赖 <!--PDF导出--><dependency><groupId>com.itextpdf</gro ...

最新文章

  1. mysql 表大小_MySQL查看数据库表容量大小的方法示例
  2. Python(2):基本数据类型
  3. 全国计算机等级考试题库二级C操作题100套(第75套)
  4. Liferay 用本地私服(nexus) 打包部署Portlet应用
  5. [jQuery] 针对jQuery的优化方法有哪些?
  6. 又上热搜!鸿星尔克悄悄给山西捐赠2000万物资!这些大厂也出手了...
  7. Android 实现静默安装
  8. .net core with 微服务 - 微服务架构图
  9. 面试 | 3.5 万字总结 Java 后台研发常见面试题
  10. python转cython_说说cython的缺点
  11. aardio - 【库】plusList——二次封装plus自绘组件库
  12. 人类一败涂地human fall flat游戏通关图文攻略
  13. 中国蒸汽眼罩市场销售趋势及营销渠道策略报告(新版)2022-2027年
  14. 微机原理——8086系统的概述与引脚介绍
  15. 造成BGA焊接不良问题有哪些?
  16. 手机token登入软件_app开发调试工具_app开发token使用
  17. Custom Data Objects
  18. NumPy入门讲座(5):实战演练
  19. ACDSee v8.0最完美汉化破解补丁发布,永不过期,还有绿色版
  20. KUKA机器人通过EthernetKRL控制

热门文章

  1. 定义交货类型(Delivery Types)
  2. SAP直接踢人下线 SM04
  3. SD--va01的屏幕增强
  4. SAP用户权限相关操作
  5. 融合BI+AI,新一代增强型数据分析让制造企业高效解决故障预测分析问题
  6. 那些赞助世界杯的金主,正在变成赌徒
  7. java求最大值_java-求一组整数中的最大值
  8. matlab鬼成像,一种基于光计算的可视化计算鬼成像系统及成像方法与流程
  9. 根据16进制头文件识文件类型
  10. 【Python教程】常见字符串去除空格的教程