Java 可以在ApachePOIxWPF中设置默认表样式吗?

Java 可以在ApachePOIxWPF中设置默认表样式吗?,java,apache-poi,xwpf,Java,Apache Poi,Xwpf,除了一个单元格外,还有什么方法可以设计整个桌子的样式吗 在单词内部,按照图中所示进行设置。 我想知道是否有一种方法可以指定一种基本样式,比如单词表 谢谢 表格样式存储在Word的Office Open xml文件存储中的一个单独的styles.xml文件中ApachePOI不会根据默认值创建这样的样式文档。但它支持使用XWPFDocument.createStyles创建这样的文档。如果有,则需要在该样式文档中创建一个表样式。然后使用XWPFTable.setStyleID将该样式链接到表中

除了一个单元格外,还有什么方法可以设计整个桌子的样式吗

在单词内部,按照图中所示进行设置。 我想知道是否有一种方法可以指定一种基本样式,比如单词表


谢谢

表格样式存储在
Word
Office Open xml
文件存储中的一个单独的
styles.xml
文件中
ApachePOI
不会根据默认值创建这样的样式文档。但它支持使用
XWPFDocument.createStyles
创建这样的文档。如果有,则需要在该样式文档中创建一个表样式。然后使用
XWPFTable.setStyleID
将该样式链接到表中

到目前为止,只有使用需要
org.openxmlformats.schemas.wordprocessingml.x2006.main.CTStyle
对象的构造函数才能支持创建
XWPFStyle
。因此,需要使用低级的
ooxml模式
对象和方法来创建这样一个
CTStyle
对象。最短的方法是将
XML
解析到这样的对象。下面的完整示例说明了这一点

import java.io.FileOutputStream;

import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;

public class CreateWordTable {

 private static XWPFStyle createTableStyle(XWPFStyles styles, String styleId) throws Exception {
  if (styles == null || styleId == null) return null;
  String tableStyleXML = 
     "<w:style xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" w:styleId=\"" + styleId + "\" w:type=\"table\">"
   + "<w:name w:val=\"" + styleId + "\"/>"
   + "<w:pPr><w:spacing w:lineRule=\"auto\" w:line=\"240\" w:after=\"0\"/></w:pPr>"
   + "<w:tblPr>"
   + "<w:tblStyleRowBandSize w:val=\"1\"/><w:tblStyleColBandSize w:val=\"1\"/>"
   + "<w:tblBorders>"
   + "<w:top w:val=\"single\" w:themeTint=\"99\" w:themeColor=\"text1\" w:color=\"666666\" w:space=\"0\" w:sz=\"4\"/>"
   + "<w:bottom w:val=\"single\" w:themeTint=\"99\" w:themeColor=\"text1\" w:color=\"666666\" w:space=\"0\" w:sz=\"4\"/>"
   + "<w:insideH w:val=\"single\" w:themeTint=\"99\" w:themeColor=\"text1\" w:color=\"666666\" w:space=\"0\" w:sz=\"4\"/>"
   + "</w:tblBorders>"
   + "</w:tblPr>"
   + "<w:tblStylePr w:type=\"firstRow\"><w:rPr><w:b/><w:bCs/></w:rPr></w:tblStylePr>"
   + "<w:tblStylePr w:type=\"lastRow\"><w:rPr><w:b/><w:bCs/></w:rPr></w:tblStylePr>"
   + "<w:tblStylePr w:type=\"firstCol\"><w:rPr><w:b/><w:bCs/></w:rPr></w:tblStylePr>"
   + "<w:tblStylePr w:type=\"lastCol\"><w:rPr><w:b/><w:bCs/></w:rPr></w:tblStylePr>"
   + "<w:tblStylePr w:type=\"band1Vert\"><w:tblPr/><w:tcPr><w:shd w:val=\"clear\" w:color=\"auto\" w:themeFillTint=\"33\" w:themeFill=\"text1\" w:fill=\"CCCCCC\"/></w:tcPr></w:tblStylePr>"
   + "<w:tblStylePr w:type=\"band1Horz\"><w:tblPr/><w:tcPr><w:shd w:val=\"clear\" w:color=\"auto\" w:themeFillTint=\"33\" w:themeFill=\"text1\" w:fill=\"CCCCCC\"/></w:tcPr></w:tblStylePr>"
   + "</w:style>";

  CTStyles ctStyles = CTStyles.Factory.parse(tableStyleXML);
  CTStyle ctStyle = ctStyles.getStyleArray(0);

  XWPFStyle style = styles.getStyle(styleId);
  if (style == null) {
   style = new XWPFStyle(ctStyle, styles);
   styles.addStyle(style);
  } else {
   style.setStyle(ctStyle);
  }

  return style;
 }

 public static void main(String[] args) throws Exception {

  XWPFDocument document = new XWPFDocument();

  XWPFParagraph paragraph = document.createParagraph();
  XWPFRun run = paragraph.createRun();  
  run.setText("The table");
  XWPFTable table = document.createTable(6, 4);
  for (int r = 0; r < 6; r++) {
   for (int c = 0; c < 4; c++) {
    XWPFTableCell cell = table.getRow(r).getCell(c);
    cell.setText("row " + (r+1) + ", col " + (c+1));
   }
  }

  table.removeBorders();

  XWPFStyles styles = document.createStyles();
  XWPFStyle style = createTableStyle(styles, "ListTableStyle");
  table.setStyleID(style.getStyleId());
 
  FileOutputStream out = new FileOutputStream("CreateWordTable.docx");
  document.write(out);
  out.close();
  document.close();

 }
}
import java.io.FileOutputStream;
导入org.apache.poi.xwpf.usermodel.*;
导入org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
公共类CreateWordTable{
私有静态XWPFStyle createTableStyle(XWPFStyles styles,String styleId)引发异常{
if(styles==null | | styleId==null)返回null;
字符串表样式XML=
""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ "";
CTStyles=CTStyles.Factory.parse(tableStyleXML);
CTStyle CTStyle=ctStyles.getStyleArray(0);
XWPFStyle=styles.getStyle(styleId);
if(style==null){
样式=新的XWPFStyle(ctStyle,样式);
样式。添加样式(样式);
}否则{
style.setStyle(ctStyle);
}
回归风格;
}
公共静态void main(字符串[]args)引发异常{
XWPFDocument document=新的XWPFDocument();
XWPFParagraph paragraph paragraph=document.createParagraph();
XWPFRun=段落.createRun();
run.setText(“表格”);
XWPFTable table=document.createTable(6,4);
对于(int r=0;r<6;r++){
对于(int c=0;c<4;c++){
XWPFTableCell=table.getRow(r).getCell(c);
cell.setText(“行”+(r+1)+”,列“+(c+1));
}
}
table.removeBorders();
XWPFStyles styles=document.createStyles();
XWPFStyle=createTableStyle(样式,“ListTableStyle”);
table.setStyleID(style.getStyleId());
FileOutputStream out=新的FileOutputStream(“CreateWordTable.docx”);
文件。写(出);
out.close();
document.close();
}
}

哪里有
XML
?我使用
Word
创建了一个简单的表,然后将表样式“List table 2”应用于它。然后,我解压缩生成的
*.docx
文件并查看
/word/styles.xml
。在那里,我找到了用于表格样式“列表表格2”的
XML

表格样式存储在
Word
Office Open XML
文件存储中一个单独的
style.XML
文件中
ApachePOI
不会根据默认值创建这样的样式文档。但它支持使用
XWPFDocument.createStyles
创建这样的文档。如果有,则需要在该样式文档中创建一个表样式。然后使用
XWPFTable.setStyleID
将该样式链接到表中

到目前为止,只有使用需要
org.openxmlformats.schemas.wordprocessingml.x2006.main.CTStyle
对象的构造函数才能支持创建
XWPFStyle
。因此,需要使用低级的
ooxml模式
对象和方法来创建这样一个
CTStyle
对象。最短的方法是将
XML
解析到这样的对象。下面的完整示例说明了这一点

import java.io.FileOutputStream;

import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;

public class CreateWordTable {

 private static XWPFStyle createTableStyle(XWPFStyles styles, String styleId) throws Exception {
  if (styles == null || styleId == null) return null;
  String tableStyleXML = 
     "<w:style xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" w:styleId=\"" + styleId + "\" w:type=\"table\">"
   + "<w:name w:val=\"" + styleId + "\"/>"
   + "<w:pPr><w:spacing w:lineRule=\"auto\" w:line=\"240\" w:after=\"0\"/></w:pPr>"
   + "<w:tblPr>"
   + "<w:tblStyleRowBandSize w:val=\"1\"/><w:tblStyleColBandSize w:val=\"1\"/>"
   + "<w:tblBorders>"
   + "<w:top w:val=\"single\" w:themeTint=\"99\" w:themeColor=\"text1\" w:color=\"666666\" w:space=\"0\" w:sz=\"4\"/>"
   + "<w:bottom w:val=\"single\" w:themeTint=\"99\" w:themeColor=\"text1\" w:color=\"666666\" w:space=\"0\" w:sz=\"4\"/>"
   + "<w:insideH w:val=\"single\" w:themeTint=\"99\" w:themeColor=\"text1\" w:color=\"666666\" w:space=\"0\" w:sz=\"4\"/>"
   + "</w:tblBorders>"
   + "</w:tblPr>"
   + "<w:tblStylePr w:type=\"firstRow\"><w:rPr><w:b/><w:bCs/></w:rPr></w:tblStylePr>"
   + "<w:tblStylePr w:type=\"lastRow\"><w:rPr><w:b/><w:bCs/></w:rPr></w:tblStylePr>"
   + "<w:tblStylePr w:type=\"firstCol\"><w:rPr><w:b/><w:bCs/></w:rPr></w:tblStylePr>"
   + "<w:tblStylePr w:type=\"lastCol\"><w:rPr><w:b/><w:bCs/></w:rPr></w:tblStylePr>"
   + "<w:tblStylePr w:type=\"band1Vert\"><w:tblPr/><w:tcPr><w:shd w:val=\"clear\" w:color=\"auto\" w:themeFillTint=\"33\" w:themeFill=\"text1\" w:fill=\"CCCCCC\"/></w:tcPr></w:tblStylePr>"
   + "<w:tblStylePr w:type=\"band1Horz\"><w:tblPr/><w:tcPr><w:shd w:val=\"clear\" w:color=\"auto\" w:themeFillTint=\"33\" w:themeFill=\"text1\" w:fill=\"CCCCCC\"/></w:tcPr></w:tblStylePr>"
   + "</w:style>";

  CTStyles ctStyles = CTStyles.Factory.parse(tableStyleXML);
  CTStyle ctStyle = ctStyles.getStyleArray(0);

  XWPFStyle style = styles.getStyle(styleId);
  if (style == null) {
   style = new XWPFStyle(ctStyle, styles);
   styles.addStyle(style);
  } else {
   style.setStyle(ctStyle);
  }

  return style;
 }

 public static void main(String[] args) throws Exception {

  XWPFDocument document = new XWPFDocument();

  XWPFParagraph paragraph = document.createParagraph();
  XWPFRun run = paragraph.createRun();  
  run.setText("The table");
  XWPFTable table = document.createTable(6, 4);
  for (int r = 0; r < 6; r++) {
   for (int c = 0; c < 4; c++) {
    XWPFTableCell cell = table.getRow(r).getCell(c);
    cell.setText("row " + (r+1) + ", col " + (c+1));
   }
  }

  table.removeBorders();

  XWPFStyles styles = document.createStyles();
  XWPFStyle style = createTableStyle(styles, "ListTableStyle");
  table.setStyleID(style.getStyleId());
 
  FileOutputStream out = new FileOutputStream("CreateWordTable.docx");
  document.write(out);
  out.close();
  document.close();

 }
}
import java.io.FileOutputStream;
导入org.apache.poi.xwpf.usermodel.*;
导入org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
公共类CreateWordTable{
私有静态XWPFStyle createTableStyle(XWPFStyles styles,String styleId)引发异常{
if(styles==null | | styleId==null)返回null;
字符串表样式XML=
""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ "";
CTStyles=CTStyles.Factory.parse(tableStyleXML);
CTStyle CTStyle=ctStyles.getStyleArray(0);
XWPFStyle=styles.getStyle(styleId);
if(style==null){
样式=新的XWPFStyle(ctStyle,样式);
样式。添加样式(样式);
}否则{
style.setStyle(ctStyle);
}
回归风格;
}
公共静态void main(字符串[]args)引发异常{
XWPFDocument document=新的XWPFDocument();
XWPFParagraph paragraph paragraph=document.createParagraph();
XWPFRun=段落.createRun();
run.setText(“表格”);
XWPFTable table=document.createTable(6,4);
对于(int r=0;r<6;r++){
对于(int c=0;c<4;c++){
XWPFTableCell=table.getRow(r).getCell(c);
cell.setText(“行”+(r+1)+”,列“+(c+1));
}
}
table.removeBorders();
XWPFStyles styles=document.createStyles();
XWPFStyle=createTableStyle(样式,“ListTableStyle”);
table.setStyleID(style.getStyleId());
FileOutputStream out=新的FileOutputStream(“CreateWordTable.docx”);
文件。写(出);
out.close();
document.close();
}
}
哪里有
XML
?我使用
Word
创建了一个简单的表,然后将表样式“List table 2”应用于它。然后,我解压缩生成的
*.docx
文件并查看
/word/styles.xml
。在那里,我找到了用于表样式“列表2”的
XML