poi根據模板導入導出數據

導出數據數據庫

1.要先獲取模板路徑(模板放在項目的根目錄下了)app

2.獲取到表裏面的全部單元格ide

 

XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(saveFile)); sheets = wb.iterator();//獲取到表裏面的全部單元格

 

3.遍歷excel中每一個sheet的數據
字體

4.判斷表格中標題內容,根據標題內容獲取相對應模板sheetspa

 

5.以後根據此sheet中的單元格位置放相應的數據(這次模板中第一列放的是代號,代號是惟一的,能夠根據代號查到相應的數據放入具體單元格中)excel

   能夠進行for循環進行放入數據,此表中有幾行是對下面一些進行分類的小標題,因此要判斷當前行中是否有數據,若是有的話在下一行放數據code

6.放入完成以後按照格式導出表格orm

   response.setContentType("application/binary;charset=UTF-8");
   // 設置響應輸出的頭類型
  response.setHeader("content-Type", "application/vnd.ms-excel");
  // 下載文件的默認名稱
  response.setHeader("Content-Disposition", "attachment;filename=" + downloadFilename + format);
  response.setCharacterEncoding("UTF-8");
  wb.write(response.getOutputStream());
blog

 

//根據模板導出測評分數
 @Override public void exportInfo(Map<String, Object> map, HttpServletResponse response) throws Exception { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String format = sdf.format(new Date()); String downloadFilename = ""; //excel模板路徑
        Workbook wb = null; String file = uploadDir + "/templates/uploadFile.xlsx"; if (StringUtils.isNotBlank(uploadDir)) { if (!uploadDir.endsWith("/")) { uploadDir = uploadDir + "/"; } } File saveFile = new File(file); Iterator<Sheet> sheets = null; List<List> returnlist = new ArrayList<List>(); try { wb = new XSSFWorkbook(new FileInputStream(saveFile)); sheets = wb.iterator(); if (sheets == null) { throw new Exception("excel中沒有內容"); } //遍歷excel中每一個sheet的數據
            while (sheets.hasNext()) { Sheet sheet = sheets.next(); String sheetName = sheet.getSheetName(); List<Map<String, Object>> list = null; if (sheetName.equals("健康")) { map.put("firstSymbol", "H"); map.put("type", 0); List<AssessmentInfoEntity> healList = assessmentInfoService.exportInfo(map); for (int i = 0; i < sheet.getLastRowNum(); i++) { Row row = sheet.getRow(i); if (row != null && !row.equals("")) { if (row.getCell(1) != null && row.getCell(1).getStringCellValue().replace(" ", "") != null && row.getCell(1).getStringCellValue().replace(" ", "") != "") { for (int z = 0; z < healList.size(); z++) { if (row.getCell(0).getStringCellValue().replace(" ", "").equals(healList.get(z).getSymbol())) { //判斷數據庫代號和excel中代號是否相等
                                        List<Map<String, Object>> scoreJson = (List<Map<String, Object>>) JSON.parse(String.valueOf(healList.get(z).getFenShu())); if (scoreJson != null && scoreJson.size() > 0) { for (int j = 0; j < scoreJson.size(); j++) { //分數
                                                if (null != scoreJson.get(j).get("value") && !scoreJson.get(j).get("value").equals("")) { row.getCell(j + 3).setCellValue(String.valueOf(scoreJson.get(j).get("value"))); } else { row.getCell(j + 3).setCellValue(""); } if (null != scoreJson.get(j).get("time") && !scoreJson.get(j).get("time").equals("")) { sheet.getRow(3).getCell(j+3).setCellValue(String.valueOf(scoreJson.get(j).get("time"))); } else { sheet.getRow(3).getCell(j+3).setCellValue(""); } } } row.setHeight((short) ((short) 30 * 20)); } } //  } } } } else if (sheetName.equals("一日生活常規-高寬班")) { map.put("firstSymbol", "CL"); map.put("type", 2); List<AssessmentInfoEntity> healList = assessmentInfoService.exportInfo(map); for (int i = 0; i < sheet.getLastRowNum(); i++) { Row row = sheet.getRow(i); if (row!=null && !row.equals("")){ if (row.getCell(1) != null && row.getCell(1).getStringCellValue().replace(" ", "") != null && row.getCell(1).getStringCellValue().replace(" ", "") != ""){ for (int z = 0; z < healList.size(); z++) { if (row.getCell(0).getStringCellValue().replace(" ", "").equals(healList.get(z).getSymbol())){ //判斷數據庫代號和excel中代號是否相等
                                        List<Map<String, Object>> scoreJson = (List<Map<String, Object>>) JSON.parse(String.valueOf(healList.get(z).getFenShu())); if (scoreJson != null && scoreJson.size()>0){ for (int j = 0; j < scoreJson.size(); j++) { if (null != scoreJson.get(j).get("value") && !scoreJson.get(j).get("value").equals("")){ row.getCell(j+3).setCellValue(String.valueOf(scoreJson.get(j).get("value"))); }else { row.getCell(j+3).setCellValue(""); } if (null != scoreJson.get(j).get("time") && !scoreJson.get(j).get("time").equals("")) { sheet.getRow(3).getCell(j+3).setCellValue(String.valueOf(scoreJson.get(j).get("time"))); } else { sheet.getRow(3).getCell(j+3).setCellValue(""); } } } row.setHeight((short)((short) 30*20)); } } } } } } } response.setContentType("application/binary;charset=UTF-8"); // 設置響應輸出的頭類型
            response.setHeader("content-Type", "application/vnd.ms-excel"); // 下載文件的默認名稱
            response.setHeader("Content-Disposition", "attachment;filename=" + downloadFilename + format); response.setCharacterEncoding("UTF-8"); wb.write(response.getOutputStream()); } catch (Exception e) { throw e; } finally { if (wb != null) { wb.close(); } } }

 

導入表格:ci

1.根據模板導入數據時只能導入日期格式的時間

但根據模板導出的時候會把時間輸出爲字符串格式的,因此這時須要對其進行轉化(先要判斷讀到的數據是什麼格式的,若是是字符串就進行轉化,是日期格式就能夠直接放進去)

   Map<String, Object> birthday = null;

   if (sheet.getRow(3).getCell(i+3).getCellType() == 1) { //1指的是String類型

   birthday = DateUtils.getAgeYearMonth2(sdf.parse(String.valueOf(map.get("birthday"))), sdf.parse(sheet.getRow(3).getCell(i + 3).getStringCellValue()));

   }else{

   birthday = DateUtils.getAgeYearMonth2(sdf.parse(String.valueOf(map.get("birthday"))), sheet.getRow(3).getCell(i + 3).getDateCellValue());

   }

   listAge.add(birthday);

//導入獲取數據
    public List<Map<String, Object>> getHealCellValue(Sheet sheet, Map<String, Object> map) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); List<AssessmentScoreEntity> list = new ArrayList<>(); List<AssessmentInfoEntity> listInfo = assessmentInfoService.list();//獲取全部的題目信息
        for (int i = 4; i < sheet.getPhysicalNumberOfRows(); i++) { List<Map<String, Object>> mapList = new ArrayList<>();//存score數據 list<map<String,Object>>形式
            Row row = sheet.getRow(i); if (row != null && !row.equals("")) { if (row.getCell(1) != null && row.getCell(1).getStringCellValue().replace(" ", "") != null && row.getCell(1).getStringCellValue().replace(" ", "") != "") { AssessmentScoreEntity assessmentScoreEntity = new AssessmentScoreEntity(); for (int j = 0; j < listInfo.size(); j++) { // 獲取分數表中對應的題目ID
                        if ((row.getCell(0).getStringCellValue().replace(" ", "")).equals(listInfo.get(j).getSymbol())) { assessmentScoreEntity.setAssessmentId(listInfo.get(j).getId()); } } assessmentScoreEntity.setCreateTime(new Date()); assessmentScoreEntity.setChildrenId(Long.parseLong(String.valueOf(map.get("childrenId")))); assessmentScoreEntity.setSchoolId(Long.parseLong(String.valueOf(map.get("schoolId")))); assessmentScoreEntity.setGradeId(Long.parseLong(String.valueOf(map.get("gradeId")))); assessmentScoreEntity.setSymbol(row.getCell(0).getStringCellValue()); assessmentScoreEntity.setName(row.getCell(1).getStringCellValue()); for (int j = 0; j < 7; j++) { if (sheet.getRow(i).getCell(j + 3) != null) { sheet.getRow(i).getCell(j + 3).setCellType(CellType.STRING); DecimalFormat df = new DecimalFormat("#.#"); String format = ""; Date date = new Date(); if (sheet.getRow(3).getCell(j + 3) != null && !sheet.getRow(3).getCell(j + 3).equals("")){ //打印當前單元格內數據類型
                                log.info("sheet.getRow(3).getCell(j+3).getCellType()={}", sheet.getRow(3).getCell(j+3).getCellType() ); //判斷當前單元格內數據類型是不是string類型的
                                if (sheet.getRow(3).getCell(j+3).getCellType() == 1) { date = sdf.parse(sheet.getRow(3).getCell(j + 3).getStringCellValue()); }else{ date = sheet.getRow(3).getCell(j + 3).getDateCellValue(); log.info("----------------"+date); } } Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$"); if (sheet.getRow(4).getCell(j + 3).getStringCellValue().replace(" ", "") != "" && sheet.getRow(4).getCell(j + 3).getStringCellValue().replace(" ", "") != null) { if (!pattern.matcher(sheet.getRow(i).getCell(j + 3).getStringCellValue()).matches() && sheet.getRow(i).getCell(j + 3).getStringCellValue() != null && sheet.getRow(i).getCell(j + 3).getStringCellValue() != "") { double dou = Double.valueOf(sheet.getRow(i).getCell(j + 3).getStringCellValue()); format = df.format(dou); } else { format = sheet.getRow(i).getCell(j + 3).getStringCellValue(); } Map<String, Object> objectMap = new HashMap<>(); objectMap.put("expect", ""); objectMap.put("final", ""); objectMap.put("time", sdf.format(date)); objectMap.put("value", format); mapList.add(objectMap); } } } assessmentScoreEntity.setScore(JSON.toJSONString(mapList)); list.add(assessmentScoreEntity); } } } List<Map<String, Object>> listAge = new ArrayList<>(); for (int i = 0; i < 7; i++) { //獲取填報的時間
            sheet.getRow(4).getCell(i + 3).setCellType(CellType.STRING); if (sheet.getRow(3).getCell(i + 3) != null && !sheet.getRow(3).getCell(i + 3).equals("") && sheet.getRow(4).getCell(i + 3).getStringCellValue().replace(" ", "") != null && sheet.getRow(4).getCell(i + 3).getStringCellValue().replace(" ", "") != "") { Map<String, Object> birthday = null; if (sheet.getRow(3).getCell(i+3).getCellType() == 1) { birthday = DateUtils.getAgeYearMonth2(sdf.parse(String.valueOf(map.get("birthday"))), sdf.parse(sheet.getRow(3).getCell(i + 3).getStringCellValue())); }else{ birthday = DateUtils.getAgeYearMonth2(sdf.parse(String.valueOf(map.get("birthday"))), sheet.getRow(3).getCell(i + 3).getDateCellValue()); } listAge.add(birthday); } } saveValue(list, map); saveProgress(listAge, map); return null; }
相關文章
相關標籤/搜索