pom.xml依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.0</version>
</dependency>
<!--xlsx(07)-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.0</version>
</dependency>
java代码
@Test
public void wordTest(){
String filePath="C:\\Users\\Administrator\\Desktop\\风险辨识导入表单\\风险辨识导入表单\\3.作业活动JHA分析表-渤海石化2022.07.04.1.docx";
int orderNum=1;
String a="触电\n" +
"高处坠落\n" +
"物体打击\n" +
"其他伤害";
try{
FileInputStream in = new FileInputStream(filePath);//载入文档
// 处理docx格式 即office2007以后版本
if(filePath.toLowerCase().endsWith("docx")){
//word 2007 图片不会被读取, 表格中的数据会被放在字符串的最后
XWPFDocument xwpf = new XWPFDocument(in);//得到word文档的信息
Iterator<XWPFTable> itpre = xwpf.getTablesIterator();//得到word中的表格
int total = 0;
while (itpre.hasNext()) {
itpre.next();
total += 1;
}
Iterator<XWPFTable> it = xwpf.getTablesIterator();//得到word中的表格
// 设置需要读取的表格 set是设置需要读取的第几个表格,total是文件中表格的总数
int set = orderNum;
int num = set;
// 过滤前面不需要的表格
for (int i = 0; i < set-1; i++) {
it.hasNext();
it.next();
}
List<String> tableList = new ArrayList<>();
while(it.hasNext()){
XWPFTable table = it.next();
System.out.println("这是第" + num + "个表的数据");
List<XWPFTableRow> rows = table.getRows();
//读取每一行数据
for (int i = 0; i < rows.size(); i++) {
XWPFTableRow row = rows.get(i);
//读取每一列数据
List<XWPFTableCell> cells = row.getTableCells();
List<String> rowList = new ArrayList<>();
for (int j = 0; j < cells.size(); j++) {
XWPFTableCell cell = cells.get(j);
rowList.add(cell.getText());
//输出当前的单元格的数据
// System.out.print(cell.getText()+ "\t");
// System.out.print(cell.getText()+"["+i+","+j+"]" + "\t");
//读取单元格内的换行符
if(j==5||j==6) {
for (int k = 0; k < cell.getParagraphs().size(); k++) {
String text = "";
// 遍历第一段里面所有的run 注意这里只get了0的段落
for (int p = 0; p < cell.getParagraphs().get(k).getRuns().size(); p++) {
text = text + cell.getParagraphs().get(k).getRuns().get(p);
}
System.out.println("单元格第" + k + " " + "排的内容是:" + text);
}
}
}
tableList.addAll(rowList);
System.out.println();
}
// 过滤多余的表格
while (num < total) {
it.hasNext();
it.next();
num += 1;
}
}
System.out.println(tableList);
// return tableList;
}
// else{
// // 处理doc格式 即office2003版本
// POIFSFileSystem pfs = new POIFSFileSystem(in);
// HWPFDocument hwpf = new HWPFDocument(pfs);
// Range range = hwpf.getRange();//得到文档的读取范围
// TableIterator itpre = new TableIterator(range);;//得到word中的表格
// int total = 0;
// while (itpre.hasNext()) {
// itpre.next();
// total += 1;
// }
// TableIterator it = new TableIterator(range);
// // 迭代文档中的表格
// // 如果有多个表格只读取需要的一个 set是设置需要读取的第几个表格,total是文件中表格的总数
// int set = orderNum;
// int num = set;
// for (int i = 0; i < set-1; i++) {
// it.hasNext();
// it.next();
// }
// List<String> tableList = new ArrayList<>();
// while (it.hasNext()) {
// Table tb = (Table) it.next();
// System.out.println("这是第" + num + "个表的数据");
// //迭代行,默认从0开始,可以依据需要设置i的值,改变起始行数,也可设置读取到那行,只需修改循环的判断条件即可
// for (int i = 0; i < tb.numRows(); i++) {
// List<String> rowList = new ArrayList<>();
// TableRow tr = tb.getRow(i);
// //迭代列,默认从0开始
// for (int j = 0; j < tr.numCells(); j++) {
// TableCell td = tr.getCell(j);//取得单元格
// //取得单元格的内容
// for(int k = 0; k < td.numParagraphs(); k++){
// Paragraph para = td.getParagraph(k);
// String s = para.text();
// //去除后面的特殊符号
// if(null != s && !"".equals(s)){
// s = s.substring(0, s.length()-1);
// }
// rowList.add(s);
// System.out.print(s+"["+i+","+j+"]" + "\t");
// }
// }
// tableList.addAll(rowList);
// System.out.println();
// }
// // 过滤多余的表格
// while (num < total) {
// it.hasNext();
// it.next();
// num += 1;
// }
// }
// return tableList;
// }
}catch(Exception e){
e.printStackTrace();
}
// return null;
}