首页 > 解决方案 > 无论如何,您可以在 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();

是否有可能做到这一点?

标签: javaapache-poi

解决方案


直到当前的 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();
 }
}

推荐阅读