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); //水平居中
            }
        }

效果图

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

参考资料

相关推荐
一线大码几秒前
项目中怎么确定线程池的大小
java·后端
要加油哦~3 分钟前
vue · 插槽 | $slots:访问所有命名插槽内容 | 插槽的使用:子组件和父组件如何书写?
java·前端·javascript
crud6 分钟前
Spring Boot 3 整合 Swagger:打造现代化 API 文档系统(附完整代码 + 高级配置 + 最佳实践)
java·spring boot·swagger
天天摸鱼的java工程师11 分钟前
从被测试小姐姐追着怼到运维小哥点赞:我在项目管理系统的 MySQL 优化实战
java·后端·mysql
vortex518 分钟前
探索 Shell:选择适合你的命令行利器 bash, zsh, fish, dash, sh...
linux·开发语言·bash·shell·dash
zzc92120 分钟前
MATLAB仿真生成无线通信网络拓扑推理数据集
开发语言·网络·数据库·人工智能·python·深度学习·matlab
周某某~22 分钟前
四.抽象工厂模式
java·设计模式·抽象工厂模式
HUN金克斯29 分钟前
C++/C函数
c语言·开发语言·c++
慢半拍iii30 分钟前
数据结构——F/图
c语言·开发语言·数据结构·c++
钢铁男儿32 分钟前
C# 表达式和运算符(表达式和字面量)
开发语言·c#