官方地址:https://www.e-iceblue.cn/docjava/create-table-in-word-in-java.html
Java 创建 Word 表格官方案例:
import com.spire.doc.*;
import com.spire.doc.documents.*;
import com.spire.doc.fields.TextRange;
import java.awt.*;
public class CreateTable {
public static void main(String[] args) {
//创建Word文档
Document document = new Document();
//添加一个section
Section section = document.addSection();
//数据
String[] header = {"姓名", "性别", "部门", "工号"};
String[][] data =
{
new String[]{"Winny", "女", "综合", "0109"},
new String[]{"Lois", "女", "综合", "0111"},
new String[]{"Jois", "男", "技术", "0110"},
new String[]{"Moon", "女", "销售", "0112"},
new String[]{"Vinit", "女", "后勤", "0113"},
};
//添加表格
Table table = section.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.gray);
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);
}
//添加数据到剩余行
for (int r = 0; r < data.length; r++) {
TableRow dataRow = table.getRows().get(r + 1);
dataRow.setHeight(25);
dataRow.setHeightType(TableRowHeightType.Exactly);
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.getCharacterFormat().setFontName("Arial");
range2.getCharacterFormat().setFontSize(10f);
}
}
//设置单元格背景颜色
for (int j = 1; j < table.getRows().getCount(); j++) {
if (j % 2 == 0) {
TableRow row2 = table.getRows().get(j);
for (int f = 0; f < row2.getCells().getCount(); f++) {
row2.getCells().get(f).getCellFormat().setBackColor(new Color(173, 216, 230));
}
}
}
//保存文档
document.saveToFile("CreateTable.docx", FileFormat.Docx_2013);
}
}
现实中业务:根据数据(对象集合)生成表格
第一步:先封装好数据(这个根据各自实际场景封装)
第二步:看表头,如果表头比较简单,可以参考Java 合并、拆分 Word 表格中的单元格,对需要合并、拆分的单元格进行处理;如果表头比较复杂,也可以先将表头放在模板文件里
需要注意的是,如果表头存在合并的情况,最好多出一行,防止将格式带到下面的内容里。
//获取模板文件
InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream("template.docx");
//创建Document类的对象
Document document = new Document();
//加载文件流
document.loadFromStream(resourceAsStream, FileFormat.Docx);
//获取表格
Section section = document.getSections().get(NumConstant.ZERO);
com.spire.doc.Table table = section.getTables().get(NumConstant.ZERO);
//设置表格是否跨页断行
//table.getTableFormat().isBreakAcrossPages(false);
//添加数据到剩余行
for (int r = NumConstant.ZERO; r < list.size(); r++) {
ZgcsExcelBean zgcsExcelBean = list.get(r);
//table.addRow(boolean isCopyFormat, int columnsNum)
table.addRow(true, NumConstant.EIGHT);
//从表格第三行开始添加数据
com.spire.doc.TableRow dataRow = table.getRows().get(r + NumConstant.TWO);
//设置表格自动高度
dataRow.setHeightType(TableRowHeightType.Auto);
//定位表格第三行第一列并设置格式局中
dataRow.getCells().get(NumConstant.ZERO).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
//填充数据
TextRange range1 = dataRow.getCells().get(NumConstant.ZERO).addParagraph().appendText(String.valueOf(zgcsExcelBean.getSort()));
//设置字体,这里是方正楷体_GBK
range1.getCharacterFormat().setFontName(StrConstant.FZKT_GBK);
//设置字体大小,这里是14号
range1.getCharacterFormat().setFontSize(NumConstant.FOURTEEN);
//下面依次类推,一共是八列
dataRow.getCells().get(NumConstant.ONE).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
TextRange range2 = dataRow.getCells().get(NumConstant.ONE).addParagraph().appendText(String.valueOf(zgcsExcelBean.getSub1()));
range2.getCharacterFormat().setFontName(StrConstant.FZKT_GBK);
range2.getCharacterFormat().setFontSize(NumConstant.FOURTEEN);
dataRow.getCells().get(NumConstant.TWO).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
TextRange range3 = dataRow.getCells().get(NumConstant.TWO).addParagraph().appendText(String.valueOf(zgcsExcelBean.getNotice()));
range3.getCharacterFormat().setFontName(StrConstant.FZKT_GBK);
range3.getCharacterFormat().setFontSize(NumConstant.FOURTEEN);
dataRow.getCells().get(NumConstant.THREE).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
TextRange range4 = dataRow.getCells().get(NumConstant.THREE).addParagraph().appendText(String.valueOf(zgcsExcelBean.getZgcs()));
range4.getCharacterFormat().setFontName(StrConstant.FZKT_GBK);
range4.getCharacterFormat().setFontSize(NumConstant.FOURTEEN);
dataRow.getCells().get(NumConstant.FOUR).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
TextRange range5 = dataRow.getCells().get(NumConstant.FOUR).addParagraph().appendText(String.valueOf(zgcsExcelBean.getPlannedTime()));
range5.getCharacterFormat().setFontName(StrConstant.FZKT_GBK);
range5.getCharacterFormat().setFontSize(NumConstant.FOURTEEN);
dataRow.getCells().get(NumConstant.FIVE).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
TextRange range6 = dataRow.getCells().get(NumConstant.FIVE).addParagraph().appendText(String.valueOf(zgcsExcelBean.getLeadLeader()));
range6.getCharacterFormat().setFontName(StrConstant.FZKT_GBK);
range6.getCharacterFormat().setFontSize(NumConstant.FOURTEEN);
dataRow.getCells().get(NumConstant.SIX).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
TextRange range7 = dataRow.getCells().get(NumConstant.SIX).addParagraph().appendText(String.valueOf(zgcsExcelBean.getResponsibleDepartment()));
range7.getCharacterFormat().setFontName(StrConstant.FZKT_GBK);
range7.getCharacterFormat().setFontSize(NumConstant.FOURTEEN);
dataRow.getCells().get(NumConstant.SEVEN).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
TextRange range8 = dataRow.getCells().get(NumConstant.SEVEN).addParagraph().appendText(String.valueOf(zgcsExcelBean.getRelevantDepartments()));
range8.getCharacterFormat().setFontName(StrConstant.FZKT_GBK);
range8.getCharacterFormat().setFontSize(NumConstant.FOURTEEN);
}
//保存文档,wordPath要自定义
document.saveToFile(wordPath, FileFormat.Docx);
生成之后就是:
原谅我真实数据不能展示出来😔