日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

excel 数据导入(附工具类)

發布時間:2025/3/19 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 excel 数据导入(附工具类) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
// 導入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 数据导入(附工具类)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。