java导出word文件(手绘)

文章目录

代码细节

使用的hutool的WordUtil,WordUtil对poi进行封装,但是这一块的官方封装的很少,很多细节都没有。代码中是常见的绘制段落,标题、表格等常用api

sql 复制代码
 Word07Writer writer = WordUtil.getWriter();
        // 添加段落(标题)
        DateTime dateTime = DateUtil.parseDate(month + "-01");
        String format = DateUtil.format(dateTime, "yyyy年M月");
        writer.addText(ParagraphAlignment.CENTER, new Font("方正小标宋简体", Font.BOLD, 15), StrUtil.format("{}{}抽蓄电站运行月报", format, stName));
        //添加正文
        writer.addText(ParagraphAlignment.LEFT, new Font("宋体", Font.BOLD, 10), "一、综合运行数据");
        List<Entity> table = new ArrayList<>();
        for (int i = 0; i < itemList.size(); i++) {
            Entity entity = Entity.create();
            entity.set("指标", itemList.get(i));
            entity.set("单位", unit.get(i));
            switch (i) {
                case 0:
                    entity.set("数值", result.getStr("机端发电量"));
                    break;
                case 1:
                    entity.set("数值", result.getStr("机端抽水电量"));
                    break;
                case 2:
                    entity.set("数值", result.getStr("发电次数"));
                    break;
                default:
                    entity.set("数值", result.getStr(itemList.get(i)));
            }
            entity.set("备注", beizhuList.get(i));
            table.add(entity);
        }
        XWPFTable xwpfTable = TableUtil.createTable(writer.getDoc(), table);

        // 遍历所有行
        for (XWPFTableRow row : xwpfTable.getRows()) {
            row.setHeight(500);
            row.setCantSplitRow(true);
            // 遍历行中的所有单元格
            for (XWPFTableCell cell : row.getTableCells()) {
                cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);//垂直居中
                //设置宽度
                cell.getCTTc().addNewTcPr().addNewTcW().setW(BigInteger.valueOf(100 * 25)); // 100磅转换为EMUs

                CTTc cttc = cell.getCTTc();
                CTP ctp = cttc.getPList().get(0);
                CTPPr ctppr = ctp.getPPr();
                if (ctppr == null) {
                    ctppr = ctp.addNewPPr();
                }
                CTJc ctjc = ctppr.getJc();
                if (ctjc == null) {
                    ctjc = ctppr.addNewJc();
                }
                ctjc.setVal(STJc.CENTER); //水平居中
            }
        }

效果图

效果还是很不错的,相关打码了

参考资料

相关推荐
江畔柳前堤5 小时前
roLabelImg 详细安装教程
开发语言·人工智能·后端·云原生
Wang's Blog5 小时前
Go-Zero 项目开发47:自研微服务框架的必要性与核心结构设计
开发语言·微服务·golang
白鸽(二般)5 小时前
MinIO Java Client API
java·开发语言
hPw0eKIqD5 小时前
C++ 模板参数推导问题小记(非推导上下文)
开发语言·c++
临床数据科学和人工智能兴趣组6 小时前
要使用 R Markdown,首先需要安装 R 和 RStudio,接着安装 rmarkdown 包
开发语言·数据挖掘·数据分析·r语言·r语言-4.2.1
软萌萌的16 小时前
Java Spring Boot 修改yml配置&加载顺序规则
java·spring boot·python
Nebula嵌入式6 小时前
【C语言】09-深入解析main函数
linux·c语言·开发语言·嵌入式
IT小盘7 小时前
13-企业Prompt模板-角色任务约束与输出格式
java·前端·prompt
爱敲键盘的猴子7 小时前
Java并发编程 -- volatile
java·java并发
神罚天下ET8 小时前
c# ACME client (补充)
开发语言·c#