我正在处理Microsoft Word 2007文档。

我的目标是满足:


表单元格。
段落行。


因此,我的代码可以完成这项工作,但是问题是当我使用FileOutputStream写入文件时,它仅写入我的目标之一(仅最后一次修改)。

这是标题的图片:



这是我使用的代码:

    try{

InputStream input = new FileInputStream("c:\\doslot.docx");
XWPFDocument document=new XWPFDocument(input);
 //*********************inserting the 2nd line**************************
  XWPFHeader head = document.getHeaderList().get(0);
    List<XWPFParagraph> para= head.getParagraphs();
    XWPFRun pararun=para.get(0).createRun();
    pararun.setText("DOSSIER DE LOT GLUSCAN® N°FG-4040400A");
 //*********************inserting the header thrid table cell*************************
   XWPFHeader headd = document.getHeaderList().get(1);
    List<XWPFTable> tables = headd.getTables();
    List<XWPFTableRow> rows = tables.get(0).getRows();
  XWPFTableCell cell =    rows.get(0).getTableCell(rows.get(0).getTableCells().get(3).getCTTc());
    XWPFParagraph p =cell.addParagraph();
    XWPFRun pararuno=p.createRun();
    pararuno.setText("some text");


    FileOutputStream out = new FileOutputStream("c:\\fin.docx");
    document.write(out);
    out.close();


     }catch(Exception ex){
         ex.printStackTrace();
     }

最佳答案

问题在于List<XWPFTableCell> cell = rows.get(0).getTableCells();返回新创建的列表,XWPFTableRow.getTableCells()说:


创建并返回属于该行的所有XWPFTableCell的列表


当然,注释确实存在,而代码却没有,因此sources说:

public List<XWPFTableCell> getTableCells(){
    if(tableCells == null){
        //Here it is created
        List<XWPFTableCell> cells = new ArrayList<XWPFTableCell>();
        for (CTTc tableCell : ctRow.getTcList()) {
            cells.add(new XWPFTableCell(tableCell, this, table.getPart()));
        }
        this.tableCells = cells;
    }
    return tableCells;
}


在您的帮助下,有一个XWPFTableRow.getTableCell(CTTc cell),您可以在其中传递CTTc单元格,方法肯定会返回一个现有对象:

public XWPFTableCell getTableCell(CTTc cell) {
    for(int i=0; i<tableCells.size(); i++){
        if(tableCells.get(i).getCTTc() == cell) return tableCells.get(i);
    }
    return null;
}


您可以通过调用XWPFTableCell.getCTTc()然后直接对其进行修改来实现CTTc单元。

直接访问现有单元的代码为:

XWPFTableCell cell =
    rows.getTableCell(rows.get(0).getTableCells().get(3).getCTTc());


我没有尝试或编译此代码,所以不确定它是否正确,但是我相信我的OO知识和资源。一定要这样做。如果是的话,请更正代码以确保其正确且可编译。

FTR,我认为应该有更方便的方法,编辑单元格是很普遍的,而且我认为应该没有那么复杂,我建议尝试一些有关XWPFTable及其操作的教程。

08-16 08:52