0.前言
XWPFTable是在word中操作表格的一个类。操作中遇到了在word中操作表格的功能,但是实际操作中遇到了一些问题,比如,生成的表格没有边框,合并单元格不生效等。
本文以及后面的文章都简单介绍XWPFTable的操作。
springboot:2.7
poi-ooxml:5.2.3
导入依赖,我打开poi官网:https://poi.apache.org/download.html
我们找到最新maven依赖,然后导入:
<!-- 操作word-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
1.创建表格
我们通过createTable方法在word中创建表格。
参考代码如下:
void testXWPFTable(){
System.out.println("开始执行");
try {
//定义word
XWPFDocument doc = new XWPFDocument();
//在word中创建一个表格
XWPFTable table = doc.createTable();
//表格中添加数据
XWPFTableRow row = table.getRow(0); //下标从0开始
row.getCell(0).setText("A1");
row.addNewTableCell().setText("B1");
row.addNewTableCell().setText("C1");
//导出
String path = "C:\\"; //文件路径
String name = "test"; //文件名
path = path + "/" + name + ".docx";
File file = new File(path);
if (!file.exists()) {
file.createNewFile();
}
FileOutputStream out = new FileOutputStream(file);
doc.write(out);
}catch (IOException e){
e.printStackTrace();
}
}
因为我们在代码中导出的位置是C盘根目录,所以我们找到位置打开word,就可以看到下面的内容了。
2.读取word中的表格
我们在word中定义了两个表格如下:
然后修改代码如下:
void testXWPFTable2(){
System.out.println("开始执行");
try {
InputStream is = new FileInputStream("C:\\test.docx");
//定义word
XWPFDocument doc = new XWPFDocument(is);
//获取word中所有的表格
List<XWPFTable> tableList = doc.getTables();
XWPFTable table1 = tableList.get(0); //表格中第一个表
XWPFTable table2 = tableList.get(1); //表格中第二个表
//修改表1的值
table1.getRow(0).getCell(0).setText("A1");
table1.getRow(0).getCell(1).setText("B1");
table1.getRow(1).getCell(0).setText("A2");
table1.getRow(1).getCell(1).setText("B2");
//修改表2的值
table2.getRow(0).getCell(0).setText("A1");
table2.getRow(0).getCell(1).setText("B1");
table2.getRow(1).getCell(1).setText("B2");
table2.getRow(2).getCell(0).setText("A3");
table2.getRow(2).getCell(1).setText("B3");
//导出
String path = "C:\\"; //文件路径
String name = "test2"; //文件名
path = path + "/" + name + ".docx";
File file = new File(path);
if (!file.exists()) {
file.createNewFile();
}
FileOutputStream out = new FileOutputStream(file);
doc.write(out);
}catch (IOException e){
e.printStackTrace();
}
}
执行后导出效果如下: