1 つの行にセル スパンを持つテーブルを作成したいと思います。2 つのセルにまたがるスパンは正常に機能しますが、Span コマンドは Word in のように 2 つのセルを 1 つに連結しません。
Span コマンドは、最初のセルの右の境界線を 2 番目のセルの右の境界線に移動します。
その結果、Span のある行は、他の行と同様にもう 1 つのセルになります。
追加のセルは空ですが、表示されています。
不要なセルを削除できませんでした。このセルで次の setText コマンドを使用したテストは java.lang.IndexOutOfBoundsException になるため、不要なセルへの removeCell コマンドは機能しているように見えますが、Word ファイルでは不要なセルが既に表示されています。
この問題を解決するためのアイデアはありますか?
私のセットアップ: Win7-64 dom4j-1.6.1.jar ooxml-schemas-1.1.jar poi-3.12-20150511.jar poi-excelant-3.12-20150511.jar poi-ooxml-3.12-20150511.jar poi-ooxml-schemas -3.12-20150511.jar poi-scratchpad-3.12-20150511.jar xmlbeans-2.6.0.jar
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigInteger;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
public class MainCreateTable {
public static void setCellSpan(XWPFTableCell cell, int span) {
if (cell.getCTTc().getTcPr() == null) {
cell.getCTTc().addNewTcPr();
}
if (cell.getCTTc().getTcPr().getGridSpan() == null) {
cell.getCTTc().getTcPr().addNewGridSpan();
}
cell.getCTTc().getTcPr().getGridSpan().setVal(BigInteger.valueOf((long) span));
}
/**
*
* expected Table
*
* ---------------------------------------------|<br>
* | row 1 cell 1 | row 1 cell 2 | row 1 cell 3 |<br>
* ---------------------------------------------|<br>
* | row 2 cell 1 | row 2 cell 2 |<br>
* ---------------------------------------------|<br>
* | row 3 cell 1 | row 3 cell 2 | row 3 cell 3 |<br>
* ---------------------------------------------|<br>
*
* generated Table: with an additional empty Cell in Row 2
*
* ---------------------------------------------|<br>
* | row 1 cell 1 | row 1 cell 2 | row 1 cell 3 |<br>
* ---------------------------------------------|-|<br>
* | row 2 cell 1 | row 2 cell 2 | |<br>
* ---------------------------------------------|-|<br>
* | row 3 cell 1 | row 3 cell 2 | row 3 cell 3 |<br>
* ---------------------------------------------|<br>
*
*/
public void makeTable() throws IOException {
String docName = MainCreateTable.class.getSimpleName();
XWPFDocument document = new XWPFDocument();
XWPFTable table = document.createTable();
XWPFTableRow tableRowOne = table.getRow(0);
tableRowOne.getCell(0).setText(" row 1 cell 1 ");
tableRowOne.addNewTableCell().setText(" row 1 cell 2 ");
tableRowOne.addNewTableCell().setText(" row 1 cell 3 ");
XWPFTableRow tableRowTwo = table.createRow();
tableRowTwo.getCell(0).setText(" row 2 cell 1 ");
tableRowTwo.getCell(1).setText(" row 2 cell 2 ");
setCellSpan(tableRowTwo.getCell(0), 2);
//tableRowTwo.removeCell(2);
//tableRowTwo.getCell(2).setText(" row 2 cell 3 ");
XWPFTableRow tableRowThree = table.createRow();
tableRowThree.getCell(0).setText(" row 3 cell 1 ");
tableRowThree.getCell(1).setText(" row 3 cell 2 ");
tableRowThree.getCell(2).setText(" row 3 cell 3 ");
FileOutputStream out = new FileOutputStream(new File(docName + ".docx"));
document.write(out);
out.close();
}
public static void main(String[] args) throws Exception {
MainCreateTable mainCreateTable = new MainCreateTable();
mainCreateTable.makeTable();
}
}