需要减少apache poi单词中2个单元格之间的空格

问题描述 投票:0回答:1

我正在尝试构建一张桌子。我需要减少两行之间的空间,但我无法使用

row.setheight()
来实现结果。

apache-poi apache-poi-4
1个回答
1
投票

要在

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);
  }
 }
}
© www.soinside.com 2019 - 2024. All rights reserved.