2012-02-29 7 views
0

私はMicrosoftの単語2007のドキュメントで作業しています。OutputStreamはファイルのすべての更新を保存しません

  1. 表のセルを:

    私の目標はいっぱいになっています。

  2. 段落行。

私のコードはこの作業を行いますが、問題はFileOutputStreamを使用してファイルを書き込むときに、私の目的の1つ(最後の変更のみ)を書き込むことです。ここ

は、ヘッダーの画像です:

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

、あなたの助けのために間違いなくあなたはCTTcセルを渡すXWPFTableRow.getTableCell(CTTc cell)、および方法があります既存のオブジェクトを返します。

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

私がしようとしたり、コンパイルこのコードを、私はそれが正しいかどうかわからないが、私は私のオブジェクト指向の知識と情報源を信頼していませんでした。是非ともこれがすべきです。そうであれば、コードが正しいことを確認してコンパイルしてください。

FTR、これを行うより便利な方法があるべきだと思います。細胞を編集するのはかなり一般的です。複雑すぎるはずはないと思います。私はXWPFTableとその操作に関するチュートリアルを試してみることをお勧めします。

+0

ありがとう、私はこれをチェックさせて、私は答えを異種に待っていた。 –

+0

あまりにもうまくいけませんでしたが、コードはエラーなしでコンパイルされましたが、それと同じことですが、1つの変更だけが保存されています、奇妙なことは何ですか: –

+0

私のポストを見てみてください –

関連する問題