Java POI解析Word提取数据存储在Excel

一、了解POI

POI以前有了解,这次需求是解析word读取其中标题,还有内容赛选获取自己想要的内容

经过两天的学习,开始熟悉Java这么读取word和解析。

本文中运用是读取整个页面模块的range,通过对range里面的数据进行筛选,获取自己想要的数据。

主要是了解POI的数据调用的解析。

想要实现的效果

以下测试的IP或是域名都是随便找不同类型:IP+port /url/http://www.XXX.com/www.xxx.net:8080等等存在的url组合。

目前需求是抓取这个几个关键的内容。

二、POI解析word

maven添加jar依赖

全部的POI的依赖

org.apache.poi

poi

3.17

org.apache.poi

poi-ooxml

3.17

org.apache.poi

poi-scratchpad

3.17

org.apache.poi

ooxml-schemas

1.1

org.apache.poi

poi-ooxml-schemas

3.17

关键代码

public class GetWord1 {

public static void main(String[] args) {

try {

InputStream is = new FileInputStream(new File("path")); //需要将文件路更改为word文档所在路径。

POIFSFileSystem fs = new POIFSFileSystem(is);

HWPFDocument document = new HWPFDocument(fs);

Range range = document.getRange();

CharacterRun run1 = null;//用来存储第一行内容的属性

CharacterRun run2 = null;//用来存储第二行内容的属性

int q=1;

for (int i = 0; i < range.numParagraphs()-2; i++) {

Paragraph para1 = range.getParagraph(i);// 获取第i段

Paragraph para2 = range.getParagraph(i+1);// 获取第i段

int t=i; //记录当前分析的段落数

String paratext1 = para1.text(); //当前段落和下一段

String paratext2 = para2.text();

run1=para1.getCharacterRun(0);

run2=para2.getCharacterRun(0);

if (paratext1.length() > 0&&paratext2.length() > 0) {

//这个if语句为的是去除大标题,连续三个段落字体大小递减就跳过

if(run1.getFontSize()>run2.getFontSize()&&run2.getFontSize()>range.getParagraph(i+2).getCharacterRun(0).getFontSize()) {

break;

}

//连续两段字体格式不同

if(run1.getFontSize()>run2.getFontSize()) {

content=paratext2;

run1=run2; //从新定位run1 run2

run2=range.getParagraph(t+2).getCharacterRun(0);

t=t+1;

while(run1.getFontSize()==run2.getFontSize()) {

//连续的相同

Content+=range.getParagraph(t+1).text();

if(content.matches("是否系统自身渗透结果")) break;

if(content.contains(":")||content.contains("/")){//如果是http或者是IP+端口形式

word.setName(getDomain(content));//ip

}else{//纯IP形式

word.setName(content);//ip

}

word.setAsset_name(paratext1);//标题

run1=run2;

run2=range.getParagraph(t+i).getCharacterRun(0);

t++;

……..

}

………

}

if(paratext1.matches("中危")||paratext1.matches("很高")||paratext1.matches("低危")){

list2.add(paratext1);

}

}

}

if(word1.getAsset_name()==wordname.getAsset_name())){

…..

wordend.setId(num);

wordend.setName(word1.getName());

wordend.setAsset_name(word1.getAsset_name());

if(wordname.getAvailability_assignment().equals("很高")){

wordend.setAvailability_assignment("5");

}

if(wordname.getAvailability_assignment().equals("高危")){

wordend.setAvailability_assignment("4");

}

if(wordname.getAvailability_assignment().equals("中危")){

wordend.setAvailability_assignment("3");

}

if(wordname.getAvailability_assignment().equals("低危")){

wordend.setAvailability_assignment("2");

}

wordend.setRisk("网络攻击");

wordmax.add(wordend);

num++;

……

}

}

}

System.out.println("------------------Finished-详情查看-中间文档转excel.xlsx------------------");

//Excel无模版导出

ExcelUtil.getInstar ().exportl(wordmax, Word.class, "中间文档转excel.xlsx");

} catch (Exception e) {

e.printStackTrace();

}

}

} }

其中有URl获取IP或者Domain

public class Test{

public static void main(String[] args){

String url1 = "192.168.1.100/admin";

System.out.println(getDomain(url));

System.out.println(getDomain(url1));

}

private static String getDomain(String url){

String regex = "^(?:[a-zA-Z]+[.])?(\\w+([.]\\w+)*)/.*$";

Matcher matcher = Pattern.compile(regex).matcher(url);

String result = null;

if(matcher.find()){

result = matcher.group(1);

}

return result;

}

}

运行结果:

完整的测试数据

输出到excel

GUI界面化数据操作完成和输出excel

三、总结

1、接触POI三天左右,主要是通过对文档的整个的range遍历获取数据,再通过自己的不同数据的需求进行筛选和数据处理。

2、相比HTml获取数据java获取word解析里面的数据更加的难一些,html里面有标签,可以通过操作js、css、html的标签来实现数据的获取,但是word没有特定的标签去获取,这个只能通过遍历,对比文本的大小、文本的字体等等相关信息。

3、这次word解析,结合上次的html的解析获取数据,对应java的操作不同的类型的文件流有了新的认识。

四、参考文献

​公众号:

thelostworld:

poi 顺序解析word_JavaPOI解析word提取数据到excel相关推荐

  1. Java POI解析Word提取数据存储在Excel

    JavaPOI解析word提取数据到excel 一.了解POI POI以前有了解,这次需求是解析word读取其中标题,还有内容赛选获取自己想要的内容 经过两天的学习,开始熟悉Java这么读取word和 ...

  2. html中文本信息导出表格中,大量word填写的表格资料,如何批量提取数据到Excel表里?...

    大量word填写的表格资料,要批量提取数据到Excel表里,一页对应一行,首先看一下这个word本身是什么来源的,大致可以分以下2种情况来处理. 一.网上直接生成的带html标记的word文件 如一些 ...

  3. 从Word中批量提取数据到Excel中,Word导出到Excel的利器

    从Word文件中取值并导出到Excel中,有现成的工具可实现. 不过要通过工具来批量取值,Word文件中的目标字符必须有规律才行,例如都处于表格中,或者都有下划线,只要目标符合指定的规则就可以批量提取 ...

  4. 用VBA从word的表格中提取数据到excel中

    该VBA脚本可以实现从word文档的多个表中提取数据,每个表格的信息提取到一行. Sub word2els() Set wdApp = CreateObject("kwps.applicat ...

  5. python对word提取数据,如何使用Python从doc / docx文件中提取数据

    docx是一个包含文档XML的zip文件.您可以打开zip,阅读文档并使用ElementTree解析数据. 这种技术的优点是你不需要安装任何额外的python库. import zipfile imp ...

  6. 如何将Word中数据转换为excel表格

    如何将Word转Excel是日常办公中常常会遇到的问题.那我们该如何操作才能将Word文档转换成Excel表格呢.下面就教大家两种Word转Excel的方法. Excel培训 方法一:word表格转e ...

  7. 【Python】生成Word写入数据 -操作Excel、Word、CSV(5)(保姆级图文注释+测试代码+api例程)

    目录 API说明: 1.创建有标题的 Word例程 2. 创建章节和段落 3. 设置字体和引用 4. 创建项目列表 5. 图片和表格 总结 欢迎关注 『Python』 系列,持续更新中 欢迎关注 『P ...

  8. MATLAB的figure图像提取数据至excel中

    filename='data.xlsx'; obj = get(gca,'children');x=get(obj, 'xdata');y=get(obj, 'ydata'); x=x(:); y=y ...

  9. python提取excel数据-代码详解:使用Python从不同表格中提取数据

    常用的表格数据存储文件格式--CSV,Microsoft Excel,Google Excel . Python通常称为粘合语言.这个名称归因于人们逐渐开发出的大量接口库和特征,也得益于广泛的使用和良 ...

最新文章

  1. Unsupported major.minor version (jdk版本错误)解决方案
  2. 文本框换行_多行文本框的认识以及代码详解
  3. oracle数据库第八章答案,Oracle培训(三十)——Oracle 11g 第八章知识点小结——处理数据...
  4. 『Python × C++』函数传参机制学习以及对比
  5. Modbus教程| Modbus协议,ASCII和RTU帧,Modbus工作
  6. Jmeter设置环境变量支持在任意终端目录输入jmeter直接启动
  7. string wstring
  8. C# 异步定时器,可以重载; System.Timers.Timer
  9. JZOJ 4.2 C组 打鼹鼠
  10. 使用 laravel-admin 配置后台管理系统
  11. Overload 和 Override 的区别
  12. Discuz的sc 和tc版本有什么区别
  13. 大型网站架构之安全性:高安全架构
  14. Android resource compilation failed 一定能搞定的办法
  15. 通常环境光照度参照表
  16. mtk处理器和骁龙对比_联发科(MTK)智能手机处理器平台汇总(含基本参数对比)一览...
  17. ps命令 查看系统进程信息
  18. 快速傅立叶变换:FFT算法原理及C++实现
  19. HTML5 JavaScript CSS 表单实现购物优惠打折
  20. 【Altium Designer学习】:排针类元件模型的创建以及阵列式粘贴方法

热门文章

  1. php 开发一个聊天系统,ajax+php 实现一个简单的在线聊天室功能(附带源码)
  2. python linux调试_python调试
  3. java 中的单引号报错_shell中的单引号,双引号,反引号
  4. Java非对称加密KeyPairGenerator类
  5. Java Collections.emptyList() 方法的使用及注意事项
  6. 用户密码到底要怎样存储?
  7. win7 找不到 计算机策略组,win7打开组策略报错:找不到资源string.Advanced_EnableSSL3Fallback...
  8. idea 调用c#接口_Dubbo 接口测试方法
  9. 深入理解Tomcat和Jetty源码之第一篇前奏知识
  10. Java面试日常总结大杂烩