Easy Excel 가족용 통

1. 가이드 백

        <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>${easyexcel.version}</version>
        </dependency>
         <easyexcel.version>1.1.2-beat1</easyexcel.version>

2. yml 구성
yml 구성 필요 없음
3. excel 코드
import com.alibaba.excel.EasyExcelFactory;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.metadata.Sheet;

    /**
     *         
     *
     * @param headerList     
     * @param list           
     * @param process      
     * @param tenantId     id
     * @param grantId       id
     * @return url
     */
    public String uploadWithData(List<FieldBaseVO> headerList, List<Map<String, DataBaseVO>> list, Process process,
                                 Long tenantId, Long grantId) {

        try {
            OutputStream out = new FileOutputStream(fileName);
            ExcelWriter writer = EasyExcelFactory.getWriter(out);
            //      
            Sheet sheet1 = getSheet(headerList);

            writer.write1(generateFormData(headerList, list, process, tenantId, grantId), sheet1);
            mergeNotList(writer, headerList, list);
            writer.finish();
            out.close();

        } catch (FileNotFoundException e) {
            process.setState("  ");
            process.setDescription("FileNotFoundException");
            processDao.update(process);
            e.printStackTrace();
        } catch (IOException e) {
            process.setState("  ");
            process.setDescription("IOException");
            processDao.update(process);
            e.printStackTrace();
        }

        return uploadTemplateByFile();
    }

관련 주요 방법
    /**
     *       sheet  
     *
     * @param headerList     
     * @return sheet
     */
    private Sheet getSheet(List<FieldBaseVO> headerList) {
        //      
        Sheet sheet1 = new Sheet(1);
        //      
        sheet1.setSheetName("   form  ");
        //    header
        //  ,   header   
        int rowNumber = anysisRowNumber(headerList, 1);
        //  header
        List<List<String>> head = transHeader(headerList, rowNumber);
        sheet1.setHead(head);
        return sheet1;
    }
    /**
     *         ,        ;
     *
     * @param headerList   
     * @param formDatas     
     * @param process        
     * @param tenantId     id
     * @param grantId       
     * @return        
     */
    private List<List<Object>> generateFormData(List<FieldBaseVO> headerList, List<Map<String, DataBaseVO>> formDatas,
                                                Process process, Long tenantId, Long grantId) {
        //      ,    
        List<List<Object>> object = new ArrayList<>();

        int count = 0;
        for (Map<String, DataBaseVO> map : formDatas) {
            int maxRowNumber = getFormDataRowNumber(map, headerList);
            for (int i = 0; i < maxRowNumber; i++) {
                //  da    ,          ;(              ,    )
                List<Object> da = new ArrayList<>();
                for (FieldBaseVO f : headerList) {
                    //    
                    if (!"list".equals(f.getType())) {

                        setDataList(toObjMap(map), f, da, tenantId, grantId);
                    } else {
                        //  list  mp;
                        List<FieldBaseVO> fields = ((TableVO) f).getFields();
                        //            list,
                        if (map.containsKey(f.getName())) {

                            JSONObject jsVO = JSONObject.parseObject(JSONObject.toJSONString(map.get(f.getName())), JSONObject.class);
                            JSONArray jsArr = jsVO.getJSONArray("value");
                            List<Map<String, Object>> mpss = new ArrayList<>();
                            for (int j = 0; j < jsArr.size(); j++) {
                                //RowVo
                                JSONObject o = (JSONObject) jsArr.get(j);
                                JSONObject value = (JSONObject) o.get("value");
                                mpss.add(value.getInnerMap());

                            }
                            // tlist        ,     data 
                            for (FieldBaseVO fbv : fields) {

                                setDataList(mpss.get(i), fbv, da, tenantId, grantId);
                            }
                        }
                    }
                }
                object.add(da);
            }
            count++;
            if (count != formDatas.size()) {
                process.setState("   ");
                process.setDescription("    ");
                process.setRate(count + "/" + formDatas.size());
                redisTemplate.boundHashOps(process.getTenantId()).put(process.getId(), JSON.toJSON(process));
            }
        }
        return object;
    }
    /**
     *    list     ,     list.size()
     *
     * @param writer          ExcelWriter
     * @param headerList   
     * @param formDatas    
     */
    private void mergeNotList(ExcelWriter writer, List<FieldBaseVO> headerList, List<Map<String, DataBaseVO>> formDatas) {

        int headRow = anysisRowNumber(headerList, 1);
        for (Map<String, DataBaseVO> map : formDatas) {
            int maxRowNumber = getFormDataRowNumber(map, headerList);
            if (maxRowNumber == 1) {
                headRow = headRow + 1;
                continue;
            }
            int colNumber = 0;

            for (FieldBaseVO f : headerList) {
                if (!"list".equals(f.getType())) {
                    writer.merge(headRow, headRow + maxRowNumber - 1, colNumber, colNumber);
                    colNumber++;
                } else {
                    //  list  mp;
                    TableVO tableVO = (TableVO) f;
                    List<FieldBaseVO> fields = tableVO.getFields();
                    colNumber = colNumber + fields.size() + 1;
                }
            }
            headRow = headRow + maxRowNumber;
        }
    }
    /**
     *        ,  fastdfs    
     *
     * @return fastdfs    
     */
    private String uploadTemplateByFile() {
        String nginxUrl = "";
        try {
            File file = new File(fileName);
            if (!file.exists()) {
                file.createNewFile();
            }
            InputStream is = new FileInputStream(file);
            String strBase64 = ioToBase64(is);

            is.close();
            FileTransferVo fileTransferVo = fileClient.upTemplate(strBase64, fileName);
            nginxUrl = fileTransferVo.getPath();
            file.delete();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return nginxUrl;
    }
    /**
     *       fromData       ,     //      
     *
     * @param map        formData     ,               
     * @param headerList          
     * @return            
     */
    private int getFormDataRowNumber(Map<String, DataBaseVO> map, List<FieldBaseVO> headerList) {

        int number = 1;
        //             list     ,    number=1
        for (int i = 0; i < headerList.size(); i++) {
            if ("list".equals(headerList.get(i).getType())) {
                break;
            }
            if (i == headerList.size() - 1) {
                return number;
            }
        }

        for (Map.Entry<String, DataBaseVO> m : map.entrySet()) {
            JSONObject jb = JSONObject.parseObject(JSONObject.toJSONString(m.getValue()));
            if ("list".equals(jb.getString("type"))) {

                if (jb.getJSONArray("value").size() > number) {
                    number = jb.getJSONArray("value").size();
                }
            }
        }
        return number;
    }

좋은 웹페이지 즐겨찾기