excel回顯及儲存部分資料
阿新 • • 發佈:2018-12-13
文章目的用於加深記憶,方便後期可以使用,便於加深自己學習過程中對這些知識點的記憶,如果哪裡有誤,懇請指正。
1.excel回顯:
由於程式碼原因,前端是給個key,檔案上傳部分不需要我們進行操作。只需要呼叫阿里雲裡的key去得到檔案流。
一.excel型別判斷
excel為xls和xlsx結尾,所以只允許結尾為這兩個的正常,否則丟擲異常,下面程式寫出了判斷方法。
if(!(key.endsWith("xls") || key.endsWith("xlsx"))){ throw new GlobalBaseException("06", "上傳格式不對");}
不同的結尾提供的jar包不一樣,總共需要jar包為下面顯示,xls為HSSF,xlsx為XSSF,基本以下為基本jar包。
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; importorg.apache.poi.xssf.usermodel.XSSFWorkbook;
基本判斷程式碼如下:通過是否包含xls來判斷呼叫哪一個
boolean is03Excel = keyDto.getKey().matches("^.+\\.(?i)(xls)$"); Workbook workbook = is03Excel ? new HSSFWorkbook(inputStream) : new XSSFWorkbook(inputStream);
二.分析程式碼與excel表格相對應。
我們通過上面可以看到根據檔案流我們去得到Workbook,workbook即為我們的整個excel檔案,Sheet為第幾頁,sheet.getRow為第列,sheet.getCell為第行。
有時候由於需要要去判斷是否包含空值,這種情況下需要加入判斷,可以看之後的程式碼。
三.如何傳給前端需要的東西。
前端需要我們是傳給資料為list裡面放的資料。
{"msg":"","result":{"list":[{
"assessmentFirstTitle":"示例:一、政治核心作用","assessmentSecondTitle":"(一)黨的組織建設","assessmentSecondScore":"40.0","assessmentDetails":"1、在新成立基層企業的同時,未及時成立黨的基層組織,在調整經營管理機構的同時,未及時調整優化黨組織設定,扣2分。2、建立黨組織時未按照黨章規定由黨員大會(黨員代表大會)選舉產生,未嚴格按照組織程式操作,扣2分。3、“兩委”任期屆滿,沒有按期進行換屆選舉,扣2分。4、未做好黨建工作依法進入公司章程的工作,未明確黨組織在企業決策、執行、監督各環節的權責和工作方式以及與其他治理主體的關係的,扣2分。","assessmentSecondNum":3},
{"assessmentFirstTitle":"示例:一、政治核心作用","assessmentSecondTitle":"(二)參與決策","assessmentSecondScore":"30.0","assessmentDetails":"1、明確黨組織參與企業重大問題決策內容,規範黨組織參與重大問題決策的程式。沒有建立健全黨委(黨總支、黨支部)會議議事規則、企業重大問題決策制度等工作制度,扣5分。2、黨委(黨總支、黨支部)沒有貫徹落實上級重要指示,扣4分。3、凡屬全域性性、政策性的大事,凡屬幹部的推薦、任免和獎懲,不提交黨委(黨總支、黨支部)會議集體研究決定討論實行集體領導決策,或程式不規範,或討論後不按照決議執行,扣2分。"},
{"assessmentFirstTitle":"示例:一、政治核心作用","assessmentSecondTitle":"(三)保證作用","assessmentSecondScore":"30.0","assessmentDetails":"1、持續推進“黨建+”工作。按照“1+3+X”的模式,沒有結合各單位的實際推行“黨建+”具體措施,沒有明確加的內容、抓手、牽頭負責人、達到的目標,扣4分;開展的活動效果不明顯,扣1-3分。2、大力開展黨建課題攻關活動,未申報扣4分,申報後未實施、實施效果不明顯扣1-3分。3、未定期對職工思想動態進行分折,或沒有針對企業熱點難點問題採取有力措施,扣2分。"}]},"STATUS":true,"INFO":""}
需要告訴前端有幾個二級。
四.程式碼展示
public void excelTaskImport(KeyDto keyDto) throws Exception { if (!Util.isNotNullorEmpty(keyDto.getKey())) { throw new GlobalBaseException("06", "引數錯誤"); } String key = keyDto.getKey(); if(!(key.endsWith("xls") || key.endsWith("xlsx"))){ throw new GlobalBaseException("06", "上傳格式不對"); } JsonResult<HashMap<String, Object>> jsonResult = new JsonResult<>(); byte[] data = aliOssOpenApiFeign.getInputStream(keyDto.getKey()); InputStream inputStream = new ByteArrayInputStream(data); boolean is03Excel = keyDto.getKey().matches("^.+\\.(?i)(xls)$"); Workbook workbook = is03Excel ? new HSSFWorkbook(inputStream) : new XSSFWorkbook(inputStream); Sheet sheet = workbook.getSheetAt(0); double sum = 0; if(!Util.isNotNullorEmpty(sheet.getRow(0).getCell(0))){ throw new GlobalBaseException("06","一級考核項題目不可為空"); } if(sheet.getRow(0).getCell(0).getCellType()!=1){ throw new GlobalBaseException("06","一級考核項題目為空或未用文字描述"); } if(!Util.isNotNullorEmpty(sheet.getRow(1).getCell(0))){ throw new GlobalBaseException("06","一級考核項不可為空"); } if(sheet.getRow(1).getCell(0).getCellType()!=1){ throw new GlobalBaseException("06","一級考核項為空或未用文字描述"); } if(!Util.isNotNullorEmpty(sheet.getRow(0).getCell(1))){ throw new GlobalBaseException("06","二級考核項題目不可為空"); } if(sheet.getRow(0).getCell(1).getCellType()!=1){ throw new GlobalBaseException("06","二級考核項題目為空或未用文字描述"); } if(!Util.isNotNullorEmpty(sheet.getRow(0).getCell(2))){ throw new GlobalBaseException("06","二級考核項分數題目不可為空"); } if(sheet.getRow(0).getCell(2).getCellType()!=1){ throw new GlobalBaseException("06","二級考核項分數題目為空或未用文字描述"); } if(!Util.isNotNullorEmpty(sheet.getRow(0).getCell(3))){ throw new GlobalBaseException("06","考核計分規則題目不可為空"); } if(sheet.getRow(0).getCell(3).getCellType()!=1){ throw new GlobalBaseException("06","考核計分規則題目為空或未用文字描述"); } for (int i = 1; i < sheet.getPhysicalNumberOfRows(); i++) { if (!Util.isNotNullorEmpty(sheet.getRow(i).getCell(1))) { throw new GlobalBaseException("06", i+1+"行匯入的考核細則有空值,請填寫完整!"); } if(sheet.getRow(i).getCell(1).getCellType()!=1){ throw new GlobalBaseException("06",i+1+"行二級考核項為空或未用文字描述"); } if(!Util.isNotNullorEmpty(sheet.getRow(i).getCell(2))){ throw new GlobalBaseException("06", i+1+"行匯入的考核細則有空值,請填寫完整!"); } if (sheet.getRow(i).getCell(2).getCellType() != 0) { throw new GlobalBaseException("06",i+1+"行二級分數為數字不可為其它或空值,請修改!"); } if (!Util.isNotNullorEmpty(sheet.getRow(i).getCell(3))) { throw new GlobalBaseException("06", i+1+"行匯入的考核細則有空值,請填寫完整!"); } if(sheet.getRow(i).getCell(3).getCellType()!=1){ throw new GlobalBaseException("06",i+1+"行考核計分規則為空或未用文字描述"); } { sum += sheet.getRow(i).getCell(2).getNumericCellValue(); } } if (sum != 100) { throw new GlobalBaseException("06", "考核細則總分值不等於100,請重新核對修改!"); } List<Map<String, Object>> list = new ArrayList<>(); String cellData = null; String[] colnums = {"assessmentFirstTitle", "assessmentSecondTitle", "assessmentSecondScore", "assessmentDetails"}; String asf = null; int startIndex = 1; for (int i = 1; i < sheet.getPhysicalNumberOfRows(); i++) { Map<String, Object> map = new LinkedHashMap<String, Object>(); Row row = sheet.getRow(i); if (row != null) { cellData = (String) getCellFormatValue(row.getCell(0)); if (Util.isNotNullorEmpty(cellData)) { if (list.size() > 0) { list.get(startIndex-1).put("assessmentSecondNum",i-startIndex); //這一大級考核項開始的行數 startIndex = i; } } if (Util.isNotNullorEmpty(cellData)) { asf = cellData; } else { cellData = asf; } map.put(colnums[0], cellData); for (int a = 1; a < row.getPhysicalNumberOfCells(); a++) { cellData = (String) getCellFormatValue(row.getCell(a)); cellData = cellData.trim(); map.put(colnums[a], cellData); } list.add(map); if (i + 1 == sheet.getPhysicalNumberOfRows()) { list.get(startIndex-1).put("assessmentSecondNum",i-startIndex+1); } } } HashMap<String, Object> result = new HashMap<>(); result.put("list", list); jsonResult.setResult(result); keyDto.setResult(jsonResult); }