java poi生成带圈序号的序列

package com.aifilling.report.util;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTAbstractNum;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTLvl;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STNumberFormat;

import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigInteger;public class WordListExample {
    public static void main(String[] args) {
        // 创建文档
        XWPFDocument document = new XWPFDocument();

        try {
            // 创建有序列表
            createOrderedList(document);

            // 保存文档
            FileOutputStream out = new FileOutputStream("有序列表示例.docx");
            document.write(out);
            out.close();
            document.close();

            System.out.println("Word文档创建成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    private static void createOrderedList(XWPFDocument document) {
        // 获取或创建编号对象
        XWPFNumbering numbering = document.getNumbering();
        if (numbering == null) {
            numbering = document.createNumbering();
        }

        // 创建抽象编号
        CTAbstractNum abstractNum = CTAbstractNum.Factory.newInstance();

        // 修复:使用long类型ID,手动确保唯一性
        // 从0开始编号,依次递增
        BigInteger abstractNumId = BigInteger.ZERO;
        // 遍历已存在的抽象编号,找到最大ID并+1
        for (XWPFAbstractNum num : numbering.getAbstractNums()) {
            if (num.getCTAbstractNum().getAbstractNumId().compareTo(abstractNumId)>=0) {
                abstractNumId = num.getCTAbstractNum().getAbstractNumId().add(BigInteger.ONE);
            }
        }
        abstractNum.setAbstractNumId(abstractNumId);

        // 配置列表级别
        CTLvl lvl = abstractNum.addNewLvl();
        lvl.setIlvl(BigInteger.ZERO); // 级别0
//        lvl.addNewNumFmt().setVal(STNumberFormat.DECIMAL); // 十进制数字
//        lvl.addNewLvlText().setVal("%1. "); // 显示格式:1. 2. 3.

        lvl.addNewNumFmt().setVal(STNumberFormat.DECIMAL_ENCLOSED_CIRCLE);
        lvl.addNewLvlText().setVal("%1 "); // 显示格式:① ② ③...
        lvl.addNewStart().setVal(BigInteger.ONE);

        // 将抽象编号添加到编号对象
        BigInteger addedAbstractNumId = numbering.addAbstractNum(new XWPFAbstractNum(abstractNum));

        // 使用抽象编号创建具体编号
        BigInteger numId = numbering.addNum(addedAbstractNumId);

        // 添加列表项
        for (int i = 1; i < 100; i++) {
            XWPFParagraph paragraph = document.createParagraph();
            paragraph.setNumID(numId);
            XWPFRun run = paragraph.createRun();
            run.setText("第"+i+"项内容");
        }
//        paragraph.setNumID(numId);
//        XWPFRun run = paragraph.createRun();
//        run.setText("第一项内容");
//
//        // 第二项
//        paragraph = document.createParagraph();
//        paragraph.setNumID(numId);
//        run = paragraph.createRun();
//        run.setText("第二项内容");
//
//        // 第三项
//        paragraph = document.createParagraph();
//        paragraph.setNumID(numId);
//        run = paragraph.createRun();
//        run.setText("第三项内容");

        // 删除第二项(索引从0开始)
//        document.removeBodyElement(1);
    }



}

 

posted @ 2025-07-28 15:17  it_bky  阅读(26)  评论(0)    收藏  举报