Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Apache POI编号列表_Java_Ms Word_Apache Poi - Fatal编程技术网

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>
    
    
    
    A
    abstractNum
    具有编号级别(
    lvl
    )的定义,A
    num
    具有
    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>