Java操作Word生成动态表格
1.需要spire.doc的jar包,有免费的(官网可下载);
2.添加jar包至资源;
3.进行在word中表格操作;
部分代码:
操作生成表格:
//创建Document对象
Document doc = new Document();
Section sec = doc.addSection();
//添加段落
Paragraph paragraph = sec.addParagraph();
// 局中对齐
paragraph.getFormat().setHorizontalAlignment(HorizontalAlignment.Center);
TextRange tr = paragraph.appendText("第一周周历");
tr.getCharacterFormat().setFontSize(20); // 字体大小
tr.getCharacterFormat().setBold(true);// 加黑
//对整个段落设置为宋体(默认为英文字体)
ParagraphStyle style1 = new ParagraphStyle(doc);
style1.setName("style");
style1.getCharacterFormat().setFontName("宋体");
doc.getStyles().add(style1);
paragraph.applyStyle(style1.getName());
//声明数组内容 header数组几个元素 表格有几列
String[] header = {"班级"};
// 数据源
String[][] data =
{
new String[]{"标题标题"},
new String[]{"2020.02.19 16:54:00 -- 2020.02.19 18:54:00"},
new String[]{"这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容这里是内容"},
};
// 循环添加表格
for (int q = 0; q < 5; q++) {
//添加表格
Table table = sec.addTable(true);
//设置表格的行数和列数
table.resetCells(data.length + 1, header.length);
//设置表格第一行作为表头,写入表头数组内容,并格式化表头数据
// TableRow row = table.getRows().get(0);
// row.isHeader(true);
// row.setHeight(20);
// row.setHeightType(TableRowHeightType.Exactly);
// row.getRowFormat().setBackColor(Color.ORANGE);
// for (int i = 0; i < header.length; i++) {
// row.getCells().get(i).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
// Paragraph p = row.getCells().get(i).addParagraph();
// p.getFormat().setHorizontalAlignment(HorizontalAlignment.Center);
// TextRange range1 = p.appendText(header[i]);
// range1.getCharacterFormat().setFontName("Arial");
// range1.getCharacterFormat().setFontSize(12f);
// range1.getCharacterFormat().setBold(true);
// range1.getCharacterFormat().setTextColor(Color.white);
// }
//写入剩余组内容到表格,并格式化数据
for (int r = 0; r < data.length; r++) {
TableRow dataRow = table.getRows().get(r);
dataRow.setHeight(25);
dataRow.setHeightType(TableRowHeightType.Auto);
dataRow.getRowFormat().setBackColor(Color.white);
for (int c = 0; c < data[r].length; c++) {
dataRow.getCells().get(c).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
TextRange range2 = dataRow.getCells().get(c).addParagraph().appendText(data[r][c]);
range2.getOwnerParagraph().getFormat().setHorizontalAlignment(HorizontalAlignment.Center);
range2.getCharacterFormat().setFontName("宋体");
range2.getCharacterFormat().setFontSize(10f);
}
}
//纵向合并指定单元格
// table.applyVerticalMerge(0, 1, 2);
// table.applyVerticalMerge(0, 4, 5);
//插入图片到指定单元格
// DocPicture dp = table.getRows().get(1).getCells().get(0).addParagraph().appendPicture("D:\\MyProject\\poi-operate-word-master\\poi-operate-word-master\\src\\main\\resources\\1.jpg");
// dp.getOwnerParagraph().getFormat().setHorizontalAlignment(HorizontalAlignment.Center);
//设置单元格背景颜色
for (int j = 1; j < table.getRows().getCount(); j++) {
if (j % 2 == 0) {
TableRow row2 = table.getRows().get(j);
for (int f = 1; f < row2.getCells().getCount(); f++) {
row2.getCells().get(f).getCellFormat().setBackColor(new Color(74, 233, 238));
}
}
}
//列宽自动适应内容
table.autoFit(AutoFitBehaviorType.Auto_Fit_To_Contents);
//设置表格边框样式
table.getTableFormat().getBorders().setBorderType(BorderStyle.Thick_Thin_Large_Gap);
// table.addRow();//默认在表格最下方插入一行
// table.addRow();//默认在表格最下方插入一行
}
//保存文档
// String userHome = System.getProperties().getProperty("user.home");
// final File dirFile = new File(userHome + File.separator + "tmp" + File.separator + "k12c" + File.separator + DateUtils.dateToStr(new Date(), DateUtils.DATE_PATTERN_DEFAULT_LONG2));
// 可以自动转换为PDF的格式
// doc.saveToFile("CreateTable.pdf", FileFormat.PDF);
// 保存为docx的word文件
doc.saveToFile("CreateTable.docx", FileFormat.Docx_2013);
具体的操作可去spire具体官网查看相关API;
网址:https://www.e-iceblue.cn/tutorials.html