2012-02-29 21 views
0

我正在处理Microsoft Word 2007文档。OutputStream不会保存文件上的所有更新

我的目标是,以填补:

  1. 表格单元格。
  2. 段落行。

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

这里是头的图像:

enter image description here

,这里是我使用的代码:

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

回答

1

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

创建并返回所有XWPFTableCell谁的列表b elongs到该行

而且ofcourse意见做的谎言,而代码没有,所以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知识和资源。无论如何,这应该做到这一点。如果确实如此 - 请更正代码以确保它是正确和可编译的。我认为应该有更方便的方法来做这件事,编辑这些单元格是很常见的,我认为它不应该那么复杂,我会建议尝试一些关于XWPFTable及其操作的教程。

+0

谢谢,让我检查一下,我完全等待答案。 – 2012-02-29 17:04:27

+0

太糟糕了,它没有工作,代码编译没有错误,但它仍然是同样的事情,只有一个更改被保存,这是一件奇怪的事情:s – 2012-02-29 17:22:27

+0

甚至尝试过这一点,请看我的帖子 – 2012-02-29 17:24:04

相关问题