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

效果图

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

参考资料

相关推荐
Theodore_10222 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
冰帝海岸3 小时前
01-spring security认证笔记
java·笔记·spring
世间万物皆对象3 小时前
Spring Boot核心概念:日志管理
java·spring boot·单元测试
没书读了4 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
----云烟----4 小时前
QT中QString类的各种使用
开发语言·qt
lsx2024064 小时前
SQL SELECT 语句:基础与进阶应用
开发语言
小二·4 小时前
java基础面试题笔记(基础篇)
java·笔记·python
开心工作室_kaic4 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
向宇it4 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
懒洋洋大魔王4 小时前
RocketMQ的使⽤
java·rocketmq·java-rocketmq