java - 是否可以在 Apache POI XWPF 中设置默认表格样式?
解决方案
表格样式存储在's文件存储中的单独styles.xml
文件中。默认情况下不会创建这样的样式文档。但它支持创建这样的 using 。如果有,则需要在该样式文档中创建表格样式。然后使用 将该样式链接到表格。Word
Office Open XML
Apache POI
XWPFDocument.createStyles
XWPFTable.setStyleID
到目前为止,只有使用需要对象XWPFStyle
的构造函数才支持创建 a 。org.openxmlformats.schemas.wordprocessingml.x2006.main.CTStyle
所以需要使用低级ooxml-schemas
对象和方法来创建这样一个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();
}
}
我XML
从哪里得到的?我使用创建了一个简单的表格Word
,然后对其应用了表格样式“List Table 2”。然后我解压缩生成的*.docx
文件并查看/word/styles.xml
. 在那里我找到了XML
用于表格样式“List Table 2”的内容。
推荐阅读
- android - 如何为预期 ACTION_OPEN_DOCUMENT_TREE 创建内容 Uri
- java - 如何从方法java返回多个字符串值
- shell - pyspark:读取文本文件但数据框显示错误
- java - Android Studio 和 Java (JEE) 项目
- sml - “=>”在标准毫升中是什么意思?
- python-3.x - 从行中删除单词并使用python将行保存在文件中
- javascript - 用 javascript 中的变量替换 Datastore 查询
- c# - 从特定项目运行迁移
- docker - 如何在 Amazon ECS 上找到服务地址 (URL) 和/或对 Mailtrain 实例进行故障排除?
- c++ - 用细胞表示迷宫