java - 无论如何,您可以在 Apache POI 中删除表格行内的边框吗?
问题描述
在 Apache POI 中,您可以从表格中删除所有边框,但是我不想删除所有边框,我只想删除表格内行的边框,这可能吗?Apache POI 是否提供了一种方法来做到这一点?
我创建了以下方法来创建表。我需要的是从第二列中删除顶部和底部边框。
public void theTable(XWPFDocument doc) {
XWPFTable t = doc.createTable(2,3);
t.getRow(0).getCell(0).setWidth("5000");
t.getRow(0).getCell(1).setWidth("500");
t.getRow(0).getCell(2).setWidth("5000");
}
我的以下内容不符合我的目标,因为它针对的是整个表格,而不是专门针对第 2 列:
t.removeBorders();
t.removeBottomBorder();
t.removeInsideHBorder();
t.removeInsideVBorder();
t.removeLeftBorder();
t.removeRightBorder();
t.removeTopBorder();
是否有可能做到这一点?
解决方案
直到当前的 Apache POI 4.1.2,XWPFTableCell
缺少边界设置的方法。但是表格的表格单元格Word
可能有自己的边框设置。所以这些方法应该在以后的版本中添加。
在那之前,我们可以提供一个自己的方法来使用底层ooxml-schemas
类来做到这一点。
例子:
import java.io.FileOutputStream;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
public class CreateWordTableCellBorders {
private enum Border { LEFT, TOP, BOTTOM, RIGHT }
static void setTableCellBorder(XWPFTableCell cell, Border border, STBorder.Enum type) {
CTTc tc = cell.getCTTc();
CTTcPr tcPr = tc.getTcPr(); if (tcPr == null) tcPr = tc.addNewTcPr();
CTTcBorders tcBorders = tcPr.getTcBorders(); if (tcBorders == null) tcBorders = tcPr.addNewTcBorders();
if (border == Border.LEFT) {
CTBorder left = tcBorders.getLeft(); if(left == null) left = tcBorders.addNewLeft();
left.setVal(type);
} else if (border == Border.TOP) {
CTBorder top = tcBorders.getTop(); if(top == null) top = tcBorders.addNewTop();
top.setVal(type);
} else if (border == Border.BOTTOM) {
CTBorder bottom = tcBorders.getBottom(); if(bottom == null) bottom = tcBorders.addNewBottom();
bottom.setVal(type);
} else if (border == Border.RIGHT) {
CTBorder right = tcBorders.getRight(); if(right == null) right = tcBorders.addNewRight();
right.setVal(type);
}
}
public static void main(String[] args) throws Exception {
XWPFDocument document= new XWPFDocument();
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run=paragraph.createRun();
run.setText("The table:");
//create the table
XWPFTable table = document.createTable(2,3);
//set column widths and table cell borders
for (XWPFTableRow row : table.getRows()) {
row.getCell(0).setWidth("5000");
row.getCell(1).setWidth("500");
setTableCellBorder(row.getCell(1), Border.TOP, STBorder.NIL);
setTableCellBorder(row.getCell(1), Border.BOTTOM, STBorder.NIL);
row.getCell(2).setWidth("5000");
}
FileOutputStream out = new FileOutputStream("CreateWordTableCellBorders.docx");
document.write(out);
out.close();
document.close();
}
}
推荐阅读
- python - 执行分组后删除异常值
- python - 读取带盒装问号的 csv
- python-3.x - 发电机根据条件boto3插入或更新
- c++ - 是否可以在 C++ 中创建一个带有负数的 3 维数组
- react-native - 键盘滚动视图问题反应原生
- angular - MatAutoComplete - 当在输入中输入未知文本并按下“ENTER”键时,如何停止在 mat-chip-list 中打开 MatAutoComplete
- python - 神经网络在第一次迭代后表现奇怪
- verilog - 无法为模块创建符号文件,因为端口的类型不受支持
- elixir - Elixir - 将复杂 if 语句的结果分配给变量
- angular - 具有非空值的角度模板编译 TS2531 错误