poi读word内的表格内容案例
代码如下:
import org.apache.poi.xwpf.usermodel.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
/**
* <p>
* <p>Title:ImportWordTest.java</p>
* <p>Description: 利用easypoi读取word的段落和表格内容</p>
* <p>Copyright: Copyright(c)2020</p>
* <p>Date:2020/2/18 10:07</p>
* @author xxx
* @version 1.0
*/
public class ReadWordTest {
public static void main(String[] args) {
String path = "D:\\模板.docx";
List<List<String>> lists = readWord(path);
for (int i = 0; i < lists.size(); i++) {
System.out.println("=====================" + i + "=====================");
List<String> stringList = lists.get(i);
for (String s : stringList) {
System.out.println(s);
}
}
}
/**
* 读word的表格
* @param path
* @return
*/
public static List<List<String>> readWord(String path){
List<List<String>> list = new ArrayList<>();
try {
File file = new File(path);
InputStream is = new FileInputStream(file);
XWPFDocument docx = new XWPFDocument(is);
List<XWPFParagraph> paragraphs = docx.getParagraphs();
//获取备注
ReadWordTest.getNotes(paragraphs);
List<XWPFTable> tables = docx.getTables();
//遍历word内的表格
for (int i = 0; i < tables.size(); i++) {
XWPFTable table = tables.get(i);
//读取每一行数据
for (int j = 0; j < table.getNumberOfRows(); j++) {
if (j >= 2) {
List<String> stringList = new ArrayList<>();
//读取表格的某一行的所有数据
XWPFTableRow row = table.getRow(j);
//读取每一列的数据
List<XWPFTableCell> cells = row.getTableCells();
String text = "";
for (int k = 0; k < cells.size(); k++) {
XWPFTableCell cell = cells.get(k);
List<XWPFParagraph> paragraphs1 = cell.getParagraphs();
text = "";
if(paragraphs1.size() <= 1) {
//一格一条数据
text = cell.getText();
}else if (paragraphs1.size() > 1){
//一格多条数据
//表格内含有多个人的时候处理
text = "";
for (int h = 0; h < paragraphs1.size(); h++) {
XWPFParagraph xwpfParagraph = paragraphs1.get(h);
List<XWPFRun> runs = xwpfParagraph.getRuns();
if (h > 0){
text += ",";
}
if (runs.size() > 1){
for (int b = 0; b < runs.size(); b++) {
XWPFRun xwpfRun = runs.get(b);
text += xwpfRun.getText(0);
}
}else {
for (XWPFRun run : runs) {
text += run.getText(0);
}
}
}
}
stringList.add(text);
}
list.add(stringList);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
/**
* 获取文档中备注(读取Word段落的内容)
* @param paragraphs
* @return
*/
public static String getNotes(List<XWPFParagraph> paragraphs){
XWPFParagraph para = paragraphs.get(3);
String notes = "";
List<XWPFRun> runList = para.getRuns();
if (runList.size() > 0) {
for (XWPFRun r : runList) {
notes += r.getText(0);
}
System.out.println("备注*:" + notes);
}else {
System.out.println("备注*:" + notes);
}
return notes;
}
}
maven依赖如下:
小编这里用的是easypoi,easypoi是对poi的再次封装。
<dependencies>
<!-- easypoi -->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>4.1.0</version>
</dependency>
</dependencies>
读取模板的内容如图:
大概就是这个样子。
读取的后的内容我们打印一下: