我是Apache POI的初学者,希望用一些行扩展word模板文件中的现有表。如果我使用下面的代码,表将被扩展为行位新行的单元格创建的正常样式。
我的目标是单元格有相同的表格单元格样式等(字体,与,高度…)
XWPFDocument doc = new XWPFDocument(openFile(fileName));
XWPFTable tbl = doc.getTableArray(tableIndex);
XWPFTableRow lastRow = tbl.getRows().get(tbl.getNumberOfRows() - 1);
cellCounter = lastRow.getTableICells().size();
XWPFTableRow newRow = tbl.createRow();
for (int i = 0; i < data.size() && cellCounter <= data.size(); i++) {
String text = data.get(i);
XWPFTableCell cell = newRow.getCell(i);
if (cell != null) {
cell.setText(text);
}
}
谢谢你的回答。R.
下面的代码获取文档中包含的第一个表中第二行的精确副本。然后更改此行单元格的文本内容。然后将此复制行插入此表的第2行和第3行之间。
更改内容必须在table.addrow
之前完成,因为在将该行插入列表表并将其添加到CTTbl的trarray
之前,该行必须完成。以后的更改将不会写入XML
中。我真的不明白为什么会这样。
然后代码获取最后一行的副本,并将该副本添加到表的末尾。在这里,更改内容也必须在table.addrow
之前完成。
import java.io.*;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
public class WordInsertTableRow {
public static void main(String[] args) throws Exception {
XWPFDocument doc = new XWPFDocument(new FileInputStream("source.docx"));
XWPFTable table = doc.getTableArray(0);
//insert new row, which is a copy of row 2, as new row 3:
XWPFTableRow oldRow = table.getRow(1);
CTRow ctrow = CTRow.Factory.parse(oldRow.getCtRow().newInputStream());
XWPFTableRow newRow = new XWPFTableRow(ctrow, table);
int i = 1;
for (XWPFTableCell cell : newRow.getTableCells()) {
for (XWPFParagraph paragraph : cell.getParagraphs()) {
for (XWPFRun run : paragraph.getRuns()) {
run.setText("New row 3 cell " + i++, 0);
}
}
}
table.addRow(newRow, 2);
//insert new last row, which is a copy previous last row:
XWPFTableRow lastRow = table.getRows().get(table.getNumberOfRows() - 1);
ctrow = CTRow.Factory.parse(lastRow.getCtRow().newInputStream());
newRow = new XWPFTableRow(ctrow, table);
i = 1;
for (XWPFTableCell cell : newRow.getTableCells()) {
for (XWPFParagraph paragraph : cell.getParagraphs()) {
for (XWPFRun run : paragraph.getRuns()) {
run.setText("New last row cell " + i++, 0);
}
}
}
table.addRow(newRow);
doc.write(new FileOutputStream("result.docx"));
doc.close();
}
}
问题内容: 我是Apache POI的初学者,想在Word模板文件中扩展现有表,并添加一些行。如果我在下面使用该代码,则将使用新的行单元格创建的普通样式扩展行位。 我的目标是单元格具有相同的表格单元格样式等(字体,带有,高度…) 感谢您的回答。R. 问题答案: 以下代码获取文档中第一个表中第二行的精确副本。然后,它更改此行中单元格的文本内容。然后将此复制的行插入到此表的第2行和第3行之间。 不断变
setRow 样式影响范围为整行。 设置 range 参数为 A1:D1,第一反应是设置第一行的前四个单元格样式,但是实际效果确是设置 第一行整行。 如果是 A1:B3 ,就会设置 第一行、第二行、第三行样式,因为单元格范围覆盖了 第一行、第二行、第三行。 函数原型 setRow(string $range, double $height [, resource $formatHandler]);
我是Java编程的新手,这是我的第一篇文章,所以希望这是一个有效的问题。我翻遍了档案,但找不到合适的答案。 我的班级正在阅读和验证一个电子表格。错误的单元格被设置为带有红色背景的样式,有效的单元格被设置为没有反循环的样式。这一切都很好,直到遇到日期单元格。setCellStyle语句似乎正在清除日期格式。有人能告诉我如何防止这种情况吗? 因此,首先在Excel中查看单元格时,它显示25/08/20
table单元格选中,存在合并的单元格时,选中样式和期望的不一样,如何解决这个问题? 不存在单元格合并时不存在这个问题: 存在单元格合并时: 想要的是这种 目前合并实现方案,是获取起始点击的单元格坐标,为选中的每一个单元格坐标添加选中样式。 有无好的解决办法?
setColumn 样式影响范围为整列。 设置 range 参数为 A1:D1,第一反应是设置第一行的前四个单元格样式,但是实际效果确是设置 第一列、第二列、第三列、第四列 整列。 函数原型 setColumn(string $range, double $width [, resource $formatHandler]); string $range $config = ['path' =>
所以我在复制时排除了“表格单元格结束标记(看起来像太阳)”。然后它将只粘贴文本(没有表格,因为我不希望它这样做),但最后一段失去了样式。 如果我在表格单元格末尾添加一个额外的段落标记(按Enter)并复制没有“表格单元格结束标记”的单元格,它就像我不想做的一样工作...几乎。目标文档没有表(是!)而且所有段落都有正确的样式(是的!),但最后也有一个不必要的额外段落标记。当然还有表格单元格中多余的空