JAVA使用POI读取word文件中的表格数据
JAVA使用POI读取word文件中的表格数据序言读取表格方法使用的POM依赖03-doc版07-docx版结语序言在我们工作中,经常会遇到使用word文件模板进行数据读取的工作,这时模板中除了正常段落内容,还可能出现表格数据,表格应该是常见的存放数据的形式,所以这就需要我们对表格部分进行单独处理,接下来我来分享我处理表格数据的方法(含03 doc及07 docx版 )。读取表格方法使用的POM依
·
序言
在我们工作中,经常会遇到使用word文件模板进行数据读取的工作,这时模板中除了正常段落内容,还可能出现表格数据,表格应该是常见的存放数据的形式,所以这就需要我们对表格部分进行单独处理,接下来我来分享我处理表格数据的方法(含03 doc及07 docx版 )。
读取表格方法
使用的POM依赖
有些不需要,但是我其他地方用到了,这里都加上了,没有影响
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.15</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.15</version> </dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.15</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>xdocreport</artifactId>
<version>1.0.6</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.15</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>ooxml-schemas</artifactId>
<version>1.3</version>
</dependency>
03-doc版
这里是03版 doc格式表格的读取方法
// 读取doc文档中表格数据示例
public List<String> doDoc(MultipartFile file){
//用于存放预览信息
List<String> list = new ArrayList<String>();
try {
//获取文件流
InputStream is = file.getInputStream();
//获取文件对象
HWPFDocument doc = new HWPFDocument(is);
//获取文件内容对象
Range r = doc.getRange();
//获取文件中所有的表格
TableIterator it = new TableIterator(r);
for (int i = 0; i < r.numParagraphs(); i++) {
//获取当前段落
Paragraph p = r.getParagraph(i);
//判断当前段落是否为表格
if (p.isInTable()) {
//迭代文档中的表格
while (it.hasNext()) {
Table tb = (Table) it.next();
//迭代行,默认从0开始
for (int j = 0; j < tb.numRows(); j++) {
//当前行
TableRow tr = tb.getRow(j);
//用于存放一行数据,不需要可以不用
String rowText = "";
//迭代列,默认从0开始
for (int x = 0; x < tr.numCells(); x++) {
//取得单元格
TableCell td = tr.getCell(x);
//取得单元格的内容
Paragraph para = td.getParagraph(0);
String text = para.text();
//自己用“ ”区分两列数据,根据自己需求 可以省略
if (StringUtil.isEmpty(rowText)){
rowText = text;
}else {
rowText = rowText + " " + text;
}
}
list.add(rowText);
}
}
}
}
return list;
} catch (IOException e) {
log.warn("[文件操作 - 读取03版doc文件] - 文件读取失败,文件名称:{}", file.getOriginalFilename());
throw new SystemException(ResponseCode.FILE_UPLOAD_EXCEPTION, e);
}
}
07-docx版
这里是07版 docx格式表格的读取方法
// 读取doc文档中表格数据示例
public List<String> doDocx(MultipartFile file){
//用于存放预览信息
List<String> list = new ArrayList<String>();
try {
//获取文件流
InputStream is = file.getInputStream();
//获取文件对象
XWPFDocument doc = new XWPFDocument(is);
//获取文件内容对象
XWPFParagraph[]paras = doc.getParagraphs().toArray(new XWPFParagraph[0]);
String tempTitle = null;
for (XWPFParagraph graph : paras) {
//获取所有的表格对象
List tables =doc.getTables();
//因我文档中只有一个所以这里没有去遍历,直接获取指定表格对象
XWPFTable table = (XWPFTable) tables.get(0);
//迭代行,默认从0开始
for (int j = 0; j < table.getRows().size(); j++) {
//当前行
XWPFTableRow tr = table.getRow(j);
//用于存放一行数据,不需要可以不用
String rowText = "";
//迭代列,默认从0开始
for (int x = 0; x < tr.getTableCells().size(); x++) {
//取得单元格
XWPFTableCell td = tr.getCell(x);
//取得单元格的内容
String text = td.getText();
//自己用“ ”区分两列数据,根据自己需求 可以省略
if (StringUtil.isEmpty(rowText)){
rowText = text;
}else {
rowText = rowText + " " + text;
}
}
list.add(rowText);
}
}
return list;
} catch (IOException e) {
log.warn("[文件操作 - 读取07版docx文件] - 文件读取失败,文件名称:{}", file.getOriginalFilename());
throw new SystemException(ResponseCode.FILE_UPLOAD_EXCEPTION, e);
}
}
结语
读取表格数据到这里就结束了,上面总结的是03版(doc 格式) 和07版(docx 格式)两个版本的处理方式,暂时满足大部分需要,如果有问题,可以留言,看到会及时回复。
用于记录相关技术点或遇到的奇葩问题,分享给大家,不是职业博主,如果有错请指正,有问题可以评论或私聊,谢谢大家观看,结束!!!
更多推荐
已为社区贡献5条内容
所有评论(0)