1. 程式人生 > >excel回顯及儲存部分資料

excel回顯及儲存部分資料

        文章目的用於加深記憶,方便後期可以使用,便於加深自己學習過程中對這些知識點的記憶,如果哪裡有誤,懇請指正。

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;
import
org.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);
    }