7

poi でテーブルを作成するのは非常に簡単でしたが、チュートリアルが非常に限られており、docx ファイルを生成する際にテーブルに単純な結合セルを作成できるチュートリアルが見つかりません。

4

3 に答える 3

8

テーブル、テーブル内の行、および行内のセルを作成した場合は、セル プロパティに gridSpan を追加できます。

if (cell.getCTTc().getTcPr() == null) cell.getCTTc().addNewTcPr();
if (cell.getCTTc().getTcPr().getGridSpan() == null) cell.getCTTc().getTcPr().addNewGridSpan();
cell.getCTTc().getTcPr().getGridSpan().setVal(2);

注: セルは org.apache.poi.xwpf.usermodel.XWPFTableCell です。

于 2013-08-28T14:00:15.297 に答える
7

水平方向/垂直方向にマージするには、2 つの CTHMerge を作成し、setVal を使用する必要があります。

  • 残りのセル用の 1 つ (STMerge.RESTART)。
  • 結合されたセルの 2 つ目 (STMerge.CONTINUE)。

a) 2x2 テーブルの水平結合の例 (例の画像) :

| | | | | | --> |___________ |
| |
| | | | --> | ____________|

 // First Row
CTHMerge hMerge = CTHMerge.Factory.newInstance();
hMerge.setVal(STMerge.RESTART);
table.getRow(0).getCell(0).getCTTc().getTcPr().setHMerge(hMerge);
table.getRow(1).getCell(0).getCTTc().getTcPr().setHMerge(hMerge);

 // Secound Row cell will be merged/"deleted"
CTHMerge hMerge1 = CTHMerge.Factory.newInstance();
hMerge1.setVal(STMerge.CONTINUE);
table.getRow(0).getCell(1).getCTTc().getTcPr().setHMerge(hMerge1);
table.getRow(1).getCell(1).getCTTc().getTcPr().setHMerge(hMerge1);

b)垂直結合の例 (例の画像)

 // First Row
CTVMerge vmerge = CTVMerge.Factory.newInstance();
vmerge.setVal(STMerge.RESTART);
table.getRow(0).getCell(0).getCTTc().getTcPr().setVMerge(vmerge);
table.getRow(0).getCell(1).getCTTc().getTcPr().setVMerge(vmerge);
 
 // Secound Row cell will be merged 
CTVMerge vmerge1 = CTVMerge.Factory.newInstance();
vmerge1.setVal(STMerge.CONTINUE);
table.getRow(1).getCell(0).getCTTc().getTcPr().setVMerge(vmerge1);
table.getRow(1).getCell(1).getCTTc().getTcPr().setVMerge(vmerge1);
于 2016-12-15T23:10:19.813 に答える