0

Microsoft Word 2007 ドキュメントに取り組んでいます。

私の目的は満たすことです:

  1. 表のセル。
  2. 段落行。

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

ヘッダーの画像は次のとおりです。

ここに画像の説明を入力

ここに私が使用したコードがあります:

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

1 に答える 1

1

問題は、List<XWPFTableCell> cell = rows.get(0).getTableCells();新しく作成されたリストを返すことです。 XWPFTableRow.getTableCells()は次のように述べています。

この行に属するすべての XWPFTableCell のリストを作成して返します

もちろん、コメントは嘘をつきますが、コードはそうではありません。

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)があり、 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 とその操作に関するチュートリアルを試してみることをお勧めします。

于 2012-02-29T16:59:41.190 に答える