来源:https://www.freesion.com/article/757264781/
我这里对原文做了一些修改,原文就一些代码,然后写了一下自己踩的坑;先看一下我要导入的模板吧。

这个表格里的数据是我改完之后的,本来是公司某个部门的图纸,在表格上面原本有图片也被我删除了,有图片并不影响我读取数据;这里一共有四个表格,然后我还删除了很多行,红色框里面是我要提取的数据。
第一步添加依赖
注意版本最好对应,我在这里踩了坑

<!--POI导入依赖--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.0.1</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.0.1</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.0.1</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>4.0.1</version></dependency>

然后直接上代码
注意要导入的是哪个包

package com.wz.demo.controller;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.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.InputStream;
import java.util.Iterator;
import java.util.List;/*** @author: wz* @date: 2022/10/26* Buddha Bless, No Bug !*/
@RestController
@RequestMapping("/wz/WordImportController")
public class WordImportController {@GetMapping("/wordImport")public void wordImport(MultipartFile file) throws Exception {InputStream in = file.getInputStream();//载入文档// 处理docx格式 即office2007以后版本if (file.getOriginalFilename().toLowerCase().endsWith("docx")) {//word 2007 图片不会被读取, 表格中的数据会被放在字符串的最后XWPFDocument xwpf = new XWPFDocument(in);//得到word文档的信息Iterator<XWPFTable> it = xwpf.getTablesIterator();//得到word中的表格// 设置需要读取的表格  set是设置需要读取的第几个表格,total是文件中表格的总数int set = 2, total = 4;int num = set;// 过滤前面不需要的表格for (int i = 0; i < set - 1; i++) {it.hasNext();it.next();}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();for (int j = 0; j < cells.size(); j++) {XWPFTableCell cell = cells.get(j);//输出当前的单元格的数据System.out.print(cell.getText() + "\t");}System.out.println();}// 过滤多余的表格while (num < total) {it.hasNext();it.next();num += 1;}}} 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 = 1, total = 4;int num = set;for (int i = 0; i < set - 1; i++) {it.hasNext();it.next();}while (it.hasNext()) {Table tb = it.next();System.out.println("这是第" + num + "个表的数据");//迭代行,默认从0开始,可以依据需要设置i的值,改变起始行数,也可设置读取到那行,只需修改循环的判断条件即可for (int i = 0; i < tb.numRows(); i++) {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);}System.out.print(s + "\t");}}System.out.println();}}}}
}

然后看我的结果吧,我这里是直接打印在控制台的,我还没有处理数据,我打算弄个实体类存下来,然后把不需要的字符再去掉,可能会有些繁琐。

大家可以注意一下,word文档里面表格的单元格如果为空的话,这里也是空的,并不是什么null啊啥的。我这里并不需要对图片处理,所以我就没写相关处理图片的代码。

还有大家如果公司电脑装了加密软件的话,导入也是会报错的,代码会识别不出来,我也是找人解密了word文档才弄成功!

POI读取word里面的表格并处理数据相关推荐

  1. poi 读取word文字图片表格

    Poi 读取word 介绍: Apache POI 简介是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office(Exce ...

  2. python读取word文档表格里的数据

    首先需要安装相应的支持库: 直接在命令行执行pip install python-docx 示例代码如下: import docx from docx import Document #导入库path ...

  3. Apache POI 读取 Word 表格数据(doc 和 docx 后缀)

    简要 因为实习工作的原因, 需要从 word 文件中读取数据,而这些 word 文件的内容都是表格的形式. 引入 jar 包 两种方式: 通过 Maven 引入到项目中(强烈推荐这种) <dep ...

  4. 使用POI读取word文档

    使用POI 读取word 文档(word 2003和2007) 最近在给客户做系统的时候,用户提出需求,要能够导入 word 文件,现在 microsoft word 有好几个版本 97.2003.2 ...

  5. 利用poi读取word模板文件生成新的word文档

    利用poi读取word模板文件生成新的word文档 利用poi读取word模板文件,并回填逻辑数据,生成并导出需要的word文档源码.解决模板读取异常问题,提供wordUtils工具类(各种功能实现) ...

  6. java word模板poi生成文件_利用poi读取word模板文件生成新的word文档

    利用poi读取word模板文件生成新的word文档 利用poi读取word模板文件,并回填逻辑数据,生成并导出需要的word文档源码.解决模板读取异常问题,提供wordUtils工具类(各种功能实现) ...

  7. java word 2003_[Java教程]POI 读取word (word 2003 和 word 2007)(转)

    [Java教程]POI 读取word (word 2003 和 word 2007)(转) 0 2017-09-27 16:00:29 POI 读取word (word 2003 和 word 200 ...

  8. POI 读取word (word 2003 和 word 2007

    最近在给客户做系统的时候,用户提出需求,要能够导入 word 文件,现在 microsoft word 有好几个版本 97.2003.2007的,这三个版本存储数据的格式上都有相当大的差别,而现在 9 ...

  9. POI 读取word (word 2003 和 word 2007)

    最近在给客户做系统的时候,用户提出需求,要能够导入 word 文件,现在 microsoft word 有好几个版本 97.2003.2007的,这三个版本存储数据的格式上都有相当大的差别,而现在 9 ...

最新文章

  1. linux严谨的telnet搭建并用防火墙开通与禁行
  2. 分享一个异步发送邮件的类
  3. 【工具】PlatformIO终于能用了,arduino大型项目开发环境PIO,编辑器+编译器+调试全功能...
  4. .NET(C#) Internals: .NET Framework中已使用的设计模式
  5. java并发中的Synchronized关键词
  6. jvm监控jstatd使用
  7. Apache Commons IO教程:初学者指南
  8. 数据挖掘算法之关联规则挖掘(一)apriori算法
  9. linux yum libsasl2,CentOS8 yum 凡是安装 安装mysql +需要:libsasl2.so.2()(64bit)
  10. 不要再被Python洗脑了!!
  11. 多核处理器_游戏爱好者的福音!AMD全新一代高性能多核处理器3950X
  12. js简单操作Cookie
  13. 基于web的网上书城网站设计与实现(SpringBoot ,Vue,MySQL )
  14. 转贴与JUNSANSI(大小写转换函数Oracle)
  15. mysql 分析explain命令执行sql的计划
  16. 那些年啊,那些事——一个程序员的奋斗史 ——39
  17. 【Android FFMPEG 开发】FFMPEG 音频重采样 ( 初始化音频重采样上下文 SwrContext | 计算音频延迟 | 计算输出样本个数 | 音频重采样 swr_convert )
  18. java debug非同期ski,简记kafka group id相同导致的不同consumers启动后不消费和延时消费问题...
  19. 管理层必备:如何激励一个团队的成员
  20. 除了芝麻代理,近几年国内比较好的代理IP有哪些?

热门文章

  1. html文本框自动下拉列表,HTML input输入框实现的动态下拉列表选择
  2. yolov5的anchors及bbox的编解码原理
  3. Gallery3d 学习笔记(13)
  4. textarea在IE浏览器下只显示一行
  5. 乔布斯的斯坦福演讲(双语)
  6. win10怎么用计算机的搜索,win10搜索文件内容怎么操作_win10如何搜索文档内的内容...
  7. selenium的工作原理
  8. JetBrains产品字体大小调整
  9. CC00027.elasticsearch——|HadoopElasticSearch.V27|——|ELK.v27|集群|QueryDSL|高亮|
  10. Cpolar实现虚拟机内网穿透,搭建私人云服务器