Java 在ApachePOI中是否有可以删除表内行边框的方法?

Java 在ApachePOI中是否有可以删除表内行边框的方法?,java,apache-poi,Java,Apache Poi,在ApachePOI中,您可以删除表中的所有边框,但是我不想删除所有边框,我只想删除表内部行的边框,可以吗?ApachePOI是否提供了实现这一点的方法 我创建了以下方法来创建表。我需要的是删除第二列的顶部和底部边框 public void theTable(XWPFDocument doc) { XWPFTable t = doc.createTable(2,3); t.getRow(0).getCell(0).setWidth("5000"); t.getRow(

在ApachePOI中,您可以删除表中的所有边框,但是我不想删除所有边框,我只想删除表内部行的边框,可以吗?ApachePOI是否提供了实现这一点的方法

我创建了以下方法来创建表。我需要的是删除第二列的顶部和底部边框

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为止,
xwptablecell
缺少边界设置方法。但是
单词
表格的表格单元格可能有自己的边框设置。因此,这些方法应该在以后的版本中添加

在此之前,我们可以使用底层的
ooxml模式
类提供自己的方法来实现这一点

例如:

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();
 }
}

到目前为止,ApachePOI4.1.2中的
xwptablecell
缺少边界设置方法。但是
单词
表格的表格单元格可能有自己的边框设置。因此,这些方法应该在以后的版本中添加

在此之前,我们可以使用底层的
ooxml模式
类提供自己的方法来实现这一点

例如:

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();
 }
}

您好,Axel,我刚刚添加了创建表的方法,我遇到的问题是专门针对第2列边框。您至少应该在问题中提到apache poi的哪些部分有问题。如果在
apachepoi
的上下文中谈论术语“table”,而没有进一步的上下文,大多数人会认为它是关于
Excel
。当然,代码示例消除了所有疑问。因此,没有代码示例就没有问题。嗨,Axel,我刚刚添加了创建表的方法,我遇到的问题是专门针对第2列边框。您至少应该在问题中提到apache poi的哪一部分有问题。如果在
apachepoi
的上下文中谈论术语“table”,而没有进一步的上下文,大多数人会认为它是关于
Excel
。当然,代码示例消除了所有疑问。所以,没有代码示例就没有问题了。谢谢,这非常有效,这正是我想要的。我确信,当涉及到java apache-poi中的表行边框时,这回答了很多人的问题。我确信这回答了很多人在JavaApachePOI中的表行边界问题。