Java poi導出word表格


@GetMapping(value = "/getPartyOrganCensus")
    public void  getPartyOrganCensus(HttpServletRequest request, HttpServletResponse response) throws IOException{

                List<PartyOrganCensusVO> list=commonPartyOrganMapperExt.getPartyOrganCensus();
        PartyOrganCensusVO total=new PartyOrganCensusVO();
        total.setRegionName("合計");
        total.setTotalPartyMember(list.stream().collect(Collectors.summingInt(PartyOrganCensusVO::getTotalPartyMember)));
        total.setTotalPartyOrgan(list.stream().collect(Collectors.summingInt(PartyOrganCensusVO::getTotalPartyOrgan)));
        total.setPartyCommittee(list.stream().collect(Collectors.summingInt(PartyOrganCensusVO::getPartyCommittee)));
        total.setPartyGeneralBranch(list.stream().collect(Collectors.summingInt(PartyOrganCensusVO::getPartyGeneralBranch)));
        total.setPartyBranch(list.stream().collect(Collectors.summingInt(PartyOrganCensusVO::getPartyBranch)));
        list.add(total);

        String tempPath = "static/exportTemplates/黨組織情況匯總表.docx";

        String outputUrl = "static/exportTemplates/test.docx";

        createWord(tempPath,outputUrl,list);
        String fileName="黨組織情況匯總表.doc";
        fileName = URLEncoder.encode(fileName, "UTF-8");
        response.setHeader("Content-Disposition","attachment; filename=" +fileName);
        response.setContentType("application/msword");// 定義輸出類型
        response.setStatus(200);
        OutputStream out=response.getOutputStream();
        byte[] buf = new byte[2 * 1024];
        int len;
        FileInputStream in = new FileInputStream(outputUrl);
        while ((len = in.read(buf)) != -1) {
            out.write(buf, 0, len);
        }
        in.close();
        out.close();

    }

 public void createWord(String inputUrl, String outputUrl,List<PartyOrganCensusVO> tableList) {
        try {
            XWPFDocument document = new XWPFDocument(POIXMLDocument.openPackage(inputUrl));
            List<XWPFTable> tables = document.getTables();
            for (int i = 0; i < tables.size(); i++) {
                //只處理行數大於等於2的表格,且不循環表頭
                XWPFTable table = tables.get(i);
                if(table.getRows().size()>1){
                    insertTable(table, tableList);
                }
            }
            File file = new File(outputUrl);
            FileOutputStream stream = new FileOutputStream(file);
            document.write(stream);
            stream.close();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void insertTable(XWPFTable table, List<PartyOrganCensusVO> tableList){
        XWPFTableRow oldrows = table.getRows().get(2);
        List<XWPFTableCell> cellList = oldrows.getTableCells();
        CTTrPr trpr=oldrows.getCtRow().getTrPr();
        //創建行,根據需要插入的數據添加新行,不處理表頭
        for(int i = 0; i < tableList.size(); i++){
            XWPFTableRow newRow = table.insertNewTableRow(i+3);
            //復制行屬性
            newRow.getCtRow().setTrPr(trpr);
            if (null == cellList) {
                return;
            }
            //復制列及其屬性和內容
            for (XWPFTableCell sourceCell : cellList) {
                XWPFTableCell newCell=newRow.createCell();
                //列屬性
                newCell.getCTTc().setTcPr(sourceCell.getCTTc().getTcPr());
                String text="";

                int j=cellList.indexOf(sourceCell);
                if(j == 0)
                    text=tableList.get(i).getRegionName();
                else if(j==2)
                    text=tableList.get(i).getTotalPartyMember().toString();
                else if(j==3)
                    text=tableList.get(i).getTotalPartyOrgan().toString();
                else if(j==4)
                    text=tableList.get(i).getPartyCommittee().toString();
                else if(j==5)
                    text=tableList.get(i).getPartyGeneralBranch().toString();
                else if(j==6)
                    text=tableList.get(i).getPartyBranch().toString();

                //段落屬性
                if(sourceCell.getParagraphs()!=null&&sourceCell.getParagraphs().size()>0){
                    newCell.getParagraphs().get(0).getCTP().setPPr(sourceCell.getParagraphs().get(0).getCTP().getPPr());
                    newCell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); //垂直居中
                    if(sourceCell.getParagraphs().get(0).getRuns()!=null&&sourceCell.getParagraphs().get(0).getRuns().size()>0){
                        XWPFRun cellR = newCell.getParagraphs().get(0).createRun();
                        cellR.setText(text);
                        cellR.setBold(sourceCell.getParagraphs().get(0).getRuns().get(0).isBold());
                        cellR.setSubscript(VerticalAlign.SUBSCRIPT);
                    }else{
                        newCell.setText(text);
                    }
                }else{
                    newCell.setText(text);
                }
            }
        }
        table.removeRow(2);
    }

vue調用

getPartyOrganCensus() {
                axios({
                        method: "get",
                        url: "/api/commonPartyOrgan/getPartyOrganCensus",
                        responseType: "blob"
                    })
                    .then(res => {
                        const fileName=["黨組織情況匯總表","doc"];
                        const _res = res.data;
                        let blob = new Blob([_res]);
                        let downloadName =
                            decodeURIComponent(fileName[0]) + "." + fileName[1]; //下載后文件名
                        if ("msSaveOrOpenBlob" in navigator) {
                            window.navigator.msSaveOrOpenBlob(blob, downloadName);
                        } else {
                            let downloadElement = document.createElement("a");
                            let href = window.URL.createObjectURL(blob); //創建下載的鏈接
                            downloadElement.href = href;
                            downloadElement.download = downloadName;
                            downloadElement.click(); //點擊下載
                            window.URL.revokeObjectURL(href); //釋放掉blob對象
                        }
                    })
                    .catch(error => {
                        console.log(error);
                        });
            },

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM