java生成word表格文档

Java通过POI创建表格文档写入数据。

构建表格

1
2
3
4
5
6
7
8
XWPFTable xwpfT = xwpfd.createTable(10, 2);
xwpfT.setWidthType(TableWidthType.AUTO);
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 2; j++) {
xwpfT.getRow(i).getCell(j).setText("第" + i + "行" + "第" + j + "列");
}
}
xwpfd.setTable(0, xwpfT);

通过带有参数的函数创建一个表格,如果没有参数,默认创建一行一列的表格。

设置表格列的宽度,setWidthType()是根据内容自动扩展,setWidth()直接数值表示宽度。

获取对应的行和列输入内容。在表格指定位置新增一行insertNewTableRow()addRow()在最后一行增加一行。

最后将表格加入文档中。

横向页面

导入依赖

1
2
3
4
5
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>ooxml-schemas</artifactId>
<version>1.4</version>
</dependency>

页面横向

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
XWPFDocument xwpfd = new XWPFDocument();
CTDocument1 document1 = xwpfd.getDocument();
CTBody body = document1.getBody();
if (!body.isSetSectPr()){
body.addNewSectPr();
}
CTSectPr sectPr = body.getSectPr();
if (!sectPr.isSetPgSz()){
sectPr.addNewPgSz();
}
//设置页面大小(默认A4)
CTPageSz pageSz = sectPr.getPgSz();
pageSz.setW(BigInteger.valueOf(16840));
pageSz.setH(BigInteger.valueOf(11907));
pageSz.setOrient(STPageOrientation.LANDSCAPE);

如果有jar包报错,降低poi的jar包版本即可。

1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.0</version>
</dependency>

设置边框

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
CTTblBorders borders = table.getCTTbl().getTblPr().addNewTblBorders();
CTBorder hBorder = borders.addNewInsideH();
hBorder.setVal(STBorder.Enum.forString("single")); // 线条类型
hBorder.setSz(new BigInteger("1")); // 线条大小
hBorder.setColor("000000"); // 设置颜色

CTBorder vBorder = borders.addNewInsideV();
vBorder.setVal(STBorder.Enum.forString("single"));
vBorder.setSz(new BigInteger("1"));
vBorder.setColor("000000");

CTBorder lBorder = borders.addNewLeft();
lBorder.setVal(STBorder.Enum.forString("single"));
lBorder.setSz(new BigInteger("1"));
lBorder.setColor("000000");

CTBorder rBorder = borders.addNewRight();
rBorder.setVal(STBorder.Enum.forString("single"));
rBorder.setSz(new BigInteger("1"));
rBorder.setColor("000000");

CTBorder tBorder = borders.addNewTop();
tBorder.setVal(STBorder.Enum.forString("single"));
tBorder.setSz(new BigInteger("1"));
tBorder.setColor("000000");

CTBorder bBorder = borders.addNewBottom();
bBorder.setVal(STBorder.Enum.forString("single"));
bBorder.setSz(new BigInteger("1"));
bBorder.setColor("000000");

table.createRow(); // 增加一行

单元格内添加段落

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
XWPFTable xwpfT = xwpfd.createTable(2, 9);
xwpfT.setTableAlignment(TableRowAlign.CENTER);
xwpfT.setWidthType(TableWidthType.AUTO);
for (int i = 0; i < 2; i++) {
XWPFTableRow row = xwpfT.getRow(i);
row.setHeight(1300);
for (int j = 0; j < 9; j++) {
XWPFTableCell xwpfTableCell = xwpfT.getRow(i).getCell(j);
xwpfTableCell.setWidthType(TableWidthType.AUTO);
xwpfTableCell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
xwpfTableCell.removeParagraph(0);
XWPFParagraph xwpfParagraph1 = xwpfTableCell.addParagraph();
xwpfParagraph1.setAlignment(ParagraphAlignment.CENTER);
XWPFRun xwpfRun5 = xwpfParagraph1.createRun();
xwpfRun5.setFontFamily("宋体");//字体
xwpfRun5.setFontSize(12);//字体大小
xwpfRun5.setColor("FF0000");
xwpfRun5.setText("第" + i + "行" + "第" + j + "列");
xwpfTableCell.setParagraph(xwpfParagraph1);
}
}