我正在尝试构建一张桌子。我需要减少两行之间的空间,但我无法使用
row.setheight()
来实现结果。
要在
XWPFTable table
中设置表格行高,还必须在高度本身之外设置高度规则。例如:
table.getRow(0).setHeight(12*20); // row height in twentieth pt
table.getRow(0).getCtRow().getTrPr().getTrHeightArray(0).setHRule(STHeightRule.EXACT); // height rule exact
可能有以下高度规则:
AT_LEAST
:至少给定的高度。如果需要的话可以更高,但不能更低。
AUTO
:默认值。一个默认段落高度的默认高度(包括前后间距)。根据内容的需要而定。
EXACT
:精确给出的高度。内容可能会被删减。
注意,XWPFTableRow.setHeight 的 0 值将不被接受与
EXACT
高度规则结合使用。然后这会回落到默认的 AUTO
高度。
根据您的代码示例:
...
private static void prepareQuotaList(XWPFTable table) {
int count = 0;
for (int row = 0; row < 4; row++) {
XWPFTableRow tableRow = table.getRow(row);
tableRow.setHeight(12*20); // row height = 12 pt
tableRow.getCtRow().getTrPr().getTrHeightArray(0).setHRule(STHeightRule.EXACT); // height rule exact
for (int col = 0; col < 3; col++) {
setCellBorders(tableRow.getCell(col), new STBorder.Enum[]{STBorder.NIL, STBorder.NIL, STBorder.NIL, STBorder.NIL});
}
...
}
...
如上所述,只有三种高度规则可能。因此,如果目标是使表格行与其内容一样高,但不能多或少,则必须使用高度规则
AUTO
。然后段落的高度决定行高。请注意,XWPFParagraph 可能在文本行之前、之间和之后设置了间距。所以你可能需要设置:
...
paragraph.setSpacingAfter(0);
paragraph.setSpacingBetween(1); // don't set this 0
paragraph.setSpacingBefore(0);
...
必须为每个已包含段落的表格单元格设置此项。因此,如果需要整个表格,那么:
XWPFTable table = document.createTable(4, 8);
for (XWPFTableRow row : table.getRows()) {
for (XWPFTableCell cell : row.getTableCells()) {
for (XWPFParagraph p : cell.getParagraphs()) {
p.setSpacingAfter(0);
p.setSpacingBetween(1); // don't set this 0
p.setSpacingBefore(0);
}
}
}