Java Apache POI编号列表
我正在使用Java Apache POI编号列表,java,ms-word,apache-poi,Java,Ms Word,Apache Poi,我正在使用apachepoi在MS-Word文档中编写一些数据。我已经花了好几个小时试图弄清楚如何创建一个编号列表,但没有取得任何结果 我已经看过了,还有很多其他的问题。考虑到apachepoi是我见过的最糟糕的文档(基本上根本没有文档),而且它们的类和方法都有非常疯狂的名称,我很难理解如此复杂的示例 Q:任何人都可以提供一个简明的代码片段来在MS Word文档中创建这样一个列表: 一个 两个 三 提前感谢。首先,我认为您问题中链接的代码存在问题,因为apache poi处于高度开发阶段,有时在
apachepoi
在MS-Word文档中编写一些数据。我已经花了好几个小时试图弄清楚如何创建一个编号列表,但没有取得任何结果
我已经看过了,还有很多其他的问题。考虑到apachepoi
是我见过的最糟糕的文档(基本上根本没有文档),而且它们的类和方法都有非常疯狂的名称,我很难理解如此复杂的示例
Q:任何人都可以提供一个简明的代码片段来在MS Word文档中创建这样一个列表:
提前感谢。首先,我认为您问题中链接的代码存在问题,因为
apache poi
处于高度开发阶段,有时在早期版本中工作的代码在当前版本中不再工作。但即使在当前版本3.16中,简单的复制和粘贴代码也会导致工作代码
所以我删除了所有的表格内容,因为链接的问题是关于表格单元格中的列表,我得到:
import java.io.FileOutputStream;
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.util.ArrayList;
import java.util.Arrays;
import java.math.BigInteger;
public class CreateWordSimplestNumberingList {
public static void main(String[] args) throws Exception {
XWPFDocument document = new XWPFDocument();
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run=paragraph.createRun();
run.setText("The list:");
ArrayList<String> documentList = new ArrayList<String>(
Arrays.asList(
new String[] {
"One",
"Two",
"Three"
}));
CTAbstractNum cTAbstractNum = CTAbstractNum.Factory.newInstance();
//Next we set the AbstractNumId. This requires care.
//Since we are in a new document we can start numbering from 0.
//But if we have an existing document, we must determine the next free number first.
cTAbstractNum.setAbstractNumId(BigInteger.valueOf(0));
/* Bullet list
CTLvl cTLvl = cTAbstractNum.addNewLvl();
cTLvl.addNewNumFmt().setVal(STNumberFormat.BULLET);
cTLvl.addNewLvlText().setVal("•");
*/
///* Decimal list
CTLvl cTLvl = cTAbstractNum.addNewLvl();
cTLvl.addNewNumFmt().setVal(STNumberFormat.DECIMAL);
cTLvl.addNewLvlText().setVal("%1.");
cTLvl.addNewStart().setVal(BigInteger.valueOf(1));
//*/
XWPFAbstractNum abstractNum = new XWPFAbstractNum(cTAbstractNum);
XWPFNumbering numbering = document.createNumbering();
BigInteger abstractNumID = numbering.addAbstractNum(abstractNum);
BigInteger numID = numbering.addNum(abstractNumID);
for (String string : documentList) {
paragraph = document.createParagraph();
paragraph.setNumID(numID);
run=paragraph.createRun();
run.setText(string);
}
paragraph = document.createParagraph();
FileOutputStream out = new FileOutputStream("CreateWordSimplestNumberingList.docx");
document.write(out);
out.close();
document.close();
}
}
在这些段落内。这是对/word/numbering.xml
中的mumId
的引用。看看这个,我发现有点像:
<w:numbering>
<w:abstractNum w:abstractNumId="0">
<w:lvl>
<w:start w:val="1"/>
<w:numFmt w:val="decimal"/>
<w:lvlText w:val="%1."/>
</w:lvl>
</w:abstractNum>
<w:num w:numId="1">
<w:abstractNumId w:val="0"/>
</w:num>
</w:numbering>
AabstractNum
具有编号级别(lvl
)的定义,Anum
具有numId
和对abstractNum
的引用
然后您需要知道
apachepoi
XWPF
基于org.openxmlformats.schemas.wordprocessingml.x2006.main.*
。所以我们有,但是只能使用org.openxmlformats.schemas.wordprocessingml.x2006.main.CTAbstractNum
创建XWPFAbstractNum
,那么如何查找有关CTAbstractNum
的文档呢。好了,谷歌搜索一下,谢谢你抽出时间!你真的帮了大忙。
<w:numbering>
<w:abstractNum w:abstractNumId="0">
<w:lvl>
<w:start w:val="1"/>
<w:numFmt w:val="decimal"/>
<w:lvlText w:val="%1."/>
</w:lvl>
</w:abstractNum>
<w:num w:numId="1">
<w:abstractNumId w:val="0"/>
</w:num>
</w:numbering>