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);
}
}