POI 生成 word 文档 简单版(包括文字、表格、图片、字体样式设置等)

 

POI 生成word 文档 一般有两种方法:

① word模板 生成word 文档 ;

② 写代码直接生成 word 文档;

我这里演示的是第二种方法,即写代码生成 word文档,不多说废话,直接代码;

 

/**
     * 镇街日报导出word
     */
    @RequestMapping(params = "exportWordForTownDaily")
    public void exportWordForTownDaily(HttpServletResponse response ,String selectDate){
        if(StringUtils.isNullOrEmpty(selectDate)){
            return;
        }
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try{
            sdf.parse(selectDate);
        }catch (Exception e){
            e.printStackTrace();
            return;
        }
        CaseEntity entity = new CaseEntity();
        entity.setRepotingTime_begin(selectDate + " 00:00:00");
        entity.setRepotingTime_end(selectDate + " 23:59:59");
        //获取镇街实际扣分
        List<CaseEntity> caseEntityList = statisticsService.getTownActualScore(entity);
        //获取各镇街情况
        List<Map<String, Object>> townDaily = statisticsService.townDaily(entity);
        //格式化查询日期(年月日)
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日");
        try {
            selectDate = sdf2.format(sdf.parse(selectDate));
        } catch (ParseException e) {
            e.printStackTrace();
        }
 
//------------------------------------生成word文档------------------------------------------------
        //创建document对象
        XWPFDocumentUtil document = new XWPFDocumentUtil();
        //创建标题段落
        XWPFParagraph titleParag = document.createParagraph();
        XWPFRun titleRun = titleParag.createRun();
        titleRun.setText("镇街日报");
        titleRun.setFontSize(20);
        titleRun.setBold(true);//字体是否加粗
        titleParag.setAlignment(ParagraphAlignment.LEFT);//段落居左
 
        //换行
        //XWPFParagraph brParagraph1 = document.createParagraph();
        //XWPFRun brRun = brParagraph1.createRun();
        //brRun.setText("\n");
        //创建一个段落
        XWPFParagraph p = document.createParagraph();
        int rows = caseEntityList.size()+1;
        int cols = 3;
        //创建一个表格
        XWPFTable table= document.createTable(rows, cols);
        //表格属性
        CTTblPr tablePr = table.getCTTbl().addNewTblPr();
        //表格宽度
        CTTblWidth width = tablePr.addNewTblW();
        width.setW(BigInteger.valueOf(5000));
        //设置表格宽度为非自动
        width.setType(STTblWidth.DXA);
 
        //表头行
        XWPFTableRow headRow = table.getRow(0);
        XWPFTableCell headCell0 = headRow.getCell(0);
        XWPFTableCell headCell1 = headRow.getCell(1);
        XWPFTableCell headCell2 = headRow.getCell(2);
 
        p = headCell0.addParagraph();
        XWPFRun headRun0 = p.createRun();
        headRun0.setText("序号");
        headRun0.setFontSize(12);
        headRun0.setBold(true);//是否粗体
        headCell0.setColor("DEDEDE");
        //垂直居中
        p.setVerticalAlignment(TextAlignment.CENTER);
        //水平居中
        p.setAlignment(ParagraphAlignment.CENTER);
 
        p = headCell1.addParagraph();
        XWPFRun headRun1 = p.createRun();
        headRun1.setText("镇街");
        headRun1.setFontSize(12);
        headRun1.setBold(true);
        headCell1.setColor("DEDEDE");
        //垂直居中
        p.setVerticalAlignment(TextAlignment.CENTER);
        //水平居中
        p.setAlignment(ParagraphAlignment.CENTER);
 
        p = headCell2.addParagraph();
        XWPFRun headRun2 = p.createRun();
        headRun2.setFontSize(12);
        headRun2.setText("总扣分");
        headRun2.setBold(true);
        headCell2.setColor("DEDEDE");
        //垂直居中
        p.setVerticalAlignment(TextAlignment.CENTER);
        //水平居中
        p.setAlignment(ParagraphAlignment.CENTER);
 
        //表主体行
        for(int i=0 ;i<caseEntityList.size();i++){
            CaseEntity caseEntity = caseEntityList.get(i);
            XWPFTableRow contentRow = table.getRow(i+1);
            XWPFTableCell cell0 = contentRow.getCell(0);
            XWPFTableCell cell1 = contentRow.getCell(1);
            XWPFTableCell cell2 = contentRow.getCell(2);
 
            p = cell0.addParagraph();
            XWPFRun pRun0=p.createRun();
            pRun0.setText(i+1+"");
            //垂直居中
            cell0.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
            //水平居中
            p.setAlignment(ParagraphAlignment.CENTER);
 
            p = cell1.addParagraph();
            XWPFRun pRun1=p.createRun();
            pRun1.setText(caseEntity.getTownName());
            //垂直居中
            cell1.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
            //水平居中
            p.setAlignment(ParagraphAlignment.CENTER);
 
            p = cell2.addParagraph();
            XWPFRun pRun2=p.createRun();
            pRun2.setText(caseEntity.getTownActualScore().toString());
            //垂直居中
            cell2.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
            //水平居中
            p.setAlignment(ParagraphAlignment.CENTER);
        }
        //-----------------------------各镇街情况------------------------------
        //创建标题段落
        XWPFParagraph title1 = document.createParagraph();
        XWPFRun title1Run = title1.createRun();
        title1Run.setText("\r各镇街比较严重的问题");
        title1Run.setFontSize(20);
        title1Run.setBold(true);
 
        try {
            for(Map<String,Object> townMap:townDaily){
                CaseEntity townCase = (CaseEntity)townMap.get("townCase");
                XWPFParagraph xwpfParagraph = document.createParagraph();
                XWPFRun xwpfRun_town = xwpfParagraph.createRun();
                XWPFRun xwpfRun = xwpfParagraph.createRun();
                xwpfRun_town.setText(townCase.getTownName());
                xwpfRun_town.setFontSize(14);
                xwpfRun_town.setBold(true);
                xwpfRun_town.setColor("00cc44");
                xwpfRun.setText(","+selectDate+"当天扣分较多的问题有:");
                xwpfRun.setFontSize(14);
                xwpfRun.setBold(true);
                List<Map<String,Object>> caseInfoList = (List<Map<String,Object>>)townMap.get("caseInfoList");
                Integer no = 0;
                for(Map<String,Object> map:caseInfoList){
                    CaseEntity caseInfo = (CaseEntity)map.get("caseInfo");
                    XWPFParagraph xwpfParagraph1 = document.createParagraph();
                    XWPFRun xwpfRun1 =xwpfParagraph1.createRun();
                    XWPFRun xwpfRun2 = xwpfParagraph1.createRun();
                    XWPFRun xwpfRun3 = xwpfParagraph1.createRun();
                    xwpfRun1.setText((++no)+"、");
                    xwpfRun2.setText(caseInfo.getProblemStreet());
                    xwpfRun3.setText(","+caseInfo.getProblemNotes());
                    xwpfRun1.setFontSize(14);
                    xwpfRun2.setFontSize(14);
                    xwpfRun2.setColor("4747d1");
                    xwpfRun3.setFontSize(14);
                    List<AttachmentEntity> fileList = (List<AttachmentEntity>)map.get("fileList");
                    for(AttachmentEntity at:fileList){
                        String mainPath = at.getMainPath();
                        String path = at.getPath();
                        if(!StringUtils.isNullOrEmpty(mainPath) && !StringUtils.isNullOrEmpty(path)){
                            //第一张图片
                            document.addPictureData(new FileInputStream(mainPath+path), XWPFDocumentUtil.PICTURE_TYPE_JPEG);
                            document.createPicture(document.getAllPictures().size() - 1, 300, 400, document.createParagraph());
                        }
                    }
                }
            }
 
            OutputStream output = response.getOutputStream();
            //生成word文件的文件名
            String fileName= new String(("镇街日报.docx").getBytes("UTF-8"),"iso-8859-1");
            response.setHeader("Content-disposition", "attachment; filename=" + fileName);
            //把word文档写到输出流
            document.write(output);
        } catch (InvalidFormatException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
//--------------------------------word文档结束-----------------------------------------------------
    }

  

   效果如下图所示:

 

 

 

 

 

posted @   吴川华仔  阅读(14120)  评论(2编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示