我尝试使用 Apache POI 将新行添加到现有 XWPFTable 上,以便添加的行保持最后一行的样式(字体、颜色等)。通常, XWPFTable.createRow() 返回空白样式的行。我尝试使用最后一行的 CTRow 作为构造参数和 XWPFTable.addRow() 创建新的 XWPFTableRow 对象。但是,当我创建对象时,它只是引用最后一行(对对象所做的任何更改都会反映在最后一行上,而不是新添加的行上)。
我该如何解决这个问题?
我尝试使用 Apache POI 将新行添加到现有 XWPFTable 上,以便添加的行保持最后一行的样式(字体、颜色等)。通常, XWPFTable.createRow() 返回空白样式的行。我尝试使用最后一行的 CTRow 作为构造参数和 XWPFTable.addRow() 创建新的 XWPFTableRow 对象。但是,当我创建对象时,它只是引用最后一行(对对象所做的任何更改都会反映在最后一行上,而不是新添加的行上)。
我该如何解决这个问题?
我知道这是一个老问题,但也许这对某人有用:
xwpfTable.addRow( xwpfTable.getRow( xwpfTable.getRows().size() - 1 ) );
在表的末尾添加一个新行,与最后一行相同。
XWPFTableRow lastTableRow = xwpfTable.getRows().get( xwpfTable.getRows().size() - 1 );
XWPFTableRow row = xwpfTable.createRow( );
for ( List< String > rowData : rowList )
{
for ( int i = 0; i < rowData.size(); i++ )
{
XWPFTableCell cell = row.getCell( i );
XWPFTableCell prevRowCell = lastTableRow.getCell( i );
if( cell != null )
{
cell.getCTTc().addNewTcPr().addNewTcBorders();
cell.getCTTc().getTcPr().setTcBorders(
prevRowCell.getCTTc().getTcPr().getTcBorders() );
cell.setText( rowData.get( i ) );
}
}
}