网站首页 > java教程 正文
一、导入相关的依赖包
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.17</version>
</dependency>
三、实现相应的工具类
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.springframework.util.StringUtils;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class Wordutil {
public static void main(String[] args) throws Exception {
Wordutil wordutil=new Wordutil();
wordutil.testReadByExtractor("/xxxx/xxxx/xxxxxxxxxx.doc);
}
public void testReadByExtractor(String absolutePath) throws Exception {
InputStream is = new FileInputStream(absolutePath);
WordExtractor extractor = new WordExtractor(is);
//获取各个段落的文本,这种适合简单的文本格式
String paraTexts[] = extractor.getParagraphText();
for (int i=0; i<paraTexts.length; i++) {
System.out.println(paraTexts[i]);
}
this.closeStream(is);
}
/**
* 关闭输入流
* @param is
*/
private void closeStream(InputStream is) {
if (!StringUtils.isEmpty(is)) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
三、如果是表格形式的需要根据是docx版本或者是doc版本使用XWPFDocument,以及HWPFDocument进行读取相应的文件,word文档中表格的读取,如果是用模板.ftl文件导出的word,无法进行相应的读取,需要重新将文件进行另存为,然后再一次读取。
其中需要的依赖包
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.0</version>
</dependency>
<!--处理word文档需要的额外的jar包-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.0</version>
</dependency>
<!--处理word文档需要的额外的jar包-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.1.0</version>
</dependency>
四、代码的实现
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.*;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.springframework.util.StringUtils;
import java.io.FileInputStream;
import java.util.Iterator;
import java.util.List;
/**
* word文档中表格的读取,如果是用模板.ftl文件导出的word,无法进行相应的读取,
* 需要将word文档另存为
*/
public class DocTableReadUtil {
/**
* 读取文档中表格
*/
public static String getWord(String filePath) {
String wordContent = "";
String tmpWord = "";//报告录入人: 录入时间:
try {
FileInputStream in = new FileInputStream(filePath);//载入文档
// 处理docx格式 即office2007以后版本
if (filePath.toLowerCase().endsWith("docx")) {
//word 2007 图片不会被读取, 表格中的数据会被放在字符串的最后
XWPFDocument xwpf = new XWPFDocument(in);//得到word文档的信息
Iterator<XWPFTable> it = xwpf.getTablesIterator();//得到word中的表格
// 设置需要读取的表格 set是设置需要读取的第几个表格,total是文件中表格的总数
int set = 4;
// 过滤前面不需要的表格
for (int i = 0; i < set - 1; i++) {
it.hasNext();
it.next();
}
while (it.hasNext()) {
XWPFTable table = it.next();
List<XWPFTableRow> rows = table.getRows();
//读取每一行数据
String tableTxt = "";
for (int i = 0; i < rows.size(); i++) {
XWPFTableRow row = rows.get(i);
String rowTxt = "<tr>";
//读取每一列数据
List<XWPFTableCell> cells = row.getTableCells();
for (int j = 0; j < cells.size(); j++) {
XWPFTableCell cell = cells.get(j);
//输出当前的单元格的数据
//输出结果-------------
}
}
}
} else {
// 处理doc格式 即office2003版本
POIFSFileSystem pfs = new POIFSFileSystem(in);
HWPFDocument hwpf = new HWPFDocument(pfs);
Range range = hwpf.getRange();//得到文档的读取范围
TableIterator it = new TableIterator(range);
// 迭代文档中的表格
// 如果有多个表格只读取需要的一个 set是设置需要读取的第几个表格,total是文件中表格的总数
int set = 4;
for (int i = 0; i < set - 1; i++) {
it.hasNext();
it.next();
}
while (it.hasNext()) {
Table tb = it.next();
//迭代行,默认从0开始,可以依据需要设置i的值,改变起始行数,也可设置读取到那行,只需修改循环的判断条件即可
String table = "";
for (int i = 0; i < tb.numRows(); i++) {
TableRow tr = tb.getRow(i);
//迭代列,默认从0开始
String row = "<tr>";
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();
//输出结果-------------
}
}
}
}
}
} catch (Exception e) {
//初始化时,处理是否将word转化为html的标签,存入数据库中,如果出现异常抛出
e.printStackTrace();
}
return wordContent;
}
}
- 上一篇: Java如何读取各种格式的文件
- 下一篇: 会用Java读取文本文件就够了吗?文件超大怎么办?
猜你喜欢
- 2024-11-19 Java 添加、读取和删除 Excel 批注
- 2024-11-19 Java 获取PDF文档中的图片的坐标信息
- 2024-11-19 Java如何获取一个文本文件的编码(格式)信息呢?
- 2024-11-19 Java 查找和高亮显示Word文本
- 2024-11-19 JVM Thread Dump 文件分析
- 2024-11-19 java web项目打成jar包运行后工具类无法读取模板文件的解决方法
- 2024-11-19 java获取到heapdump文件后,如何快速分析?
- 2024-11-19 Java 用注解实现通用功能-csv文件的读取为例
- 2024-11-19 从零学大数据之Java篇第二十五章:文件操作详解
- 2024-11-19 Java,通过文件获取MimeType的方式,文件扩展名获取ContentType
你 发表评论:
欢迎- 最近发表
-
- Java内存溢出紧急处理:10个必知的Linux命令快速定位OOM
- 面试常问的 25+ 个 Linux 命令(linux面试命令大全)
- Java堆外内存溢出紧急处理实战:Linux命令定位与Spring Boot解决
- java开发常用的Linux命令,高频的没你想象的多
- Java 应用 CPU 飙升?8 个 Linux 命令组合拳快速锁定异常线程
- Java 开发者线上问题排查常用的 15 个 Linux 命令
- Java程序员必备的Linux命令:让你的工作效率翻倍
- Java程序员必备的Linux命令全解析
- [超全整理] Java 程序员必备的 100 条 Linux 命令大全
- SAP ABAP资源导航(sap aatp)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)