今天实现了利用POI工具读取word文档,并将数据存储到sql数据库中,代码如下:

package word;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List; import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.CharacterRun;
import org.apache.poi.hwpf.usermodel.Paragraph;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.poifs.filesystem.POIFSFileSystem; import dao.WordDao; public class TikaExtraction { public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub //List<Policy_content> list = new ArrayList<>();
InputStream is;
try {
is = new FileInputStream(new File("H:\\大数据\\大数据技术应用大作业-1\\河北省信息技术手册.doc")); POIFSFileSystem fs = new POIFSFileSystem(is);
HWPFDocument document = new HWPFDocument(fs);
Range range = document.getRange();
String title = null;int item=0;
for(int i=0;i<range.numParagraphs();i++) {//通过循环读取每一段
Paragraph para1 = range.getParagraph(i);
CharacterRun run1=para1.getCharacterRun(0); //获取每一段的属性
item = i;//item用来记录当前位置
if(run1.getFontSize()==26) {//如果字体符合,说明该段落是小标题
String context = "";
title = para1.text().trim().replaceAll("\r\n", "");//取这一段为当前的title值 for(int j=item+1;j<range.numParagraphs();j++) {//从当前段的下一段开始,查找所有解释段落, Paragraph para2 = range.getParagraph(j);
CharacterRun run2=para2.getCharacterRun(0); if(run2.getFontSize()==18) {//如果字体符合,说明该段落是解释段落之一 context = context+para2.text().trim().replaceAll("\r\n", "");//把解释段落合并成一个字符串 }
if(run2.getFontSize()==26) {//如果字体为26,说明到了下一个小标题,则退出循环
break;
}
}
//以下为插入数据库方法
WordDao worddao = new WordDao();
worddao.addData(title, context); } } } catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}

代码解释注释上已经写了。

一下是我找到的对于POI工具的介绍:

使用POI读写Word doc文件

Apache poi的hwpf模块是专门用来对word doc文件进行读写操作的。在hwpf里面我们使用HWPFDocument来表示一个word doc文档。在HWPFDocument里面有这么几个概念:

Range:它表示一个范围,这个范围可以是整个文档,也可以是里面的某一小节(Section),也可以是某一个段落(Paragraph),还可以是拥有共同属性的一段文本(CharacterRun)。

  Section:word文档的一个小节,一个word文档可以由多个小节构成。

  Paragraph:word文档的一个段落,一个小节可以由多个段落构成。

  CharacterRun:具有相同属性的一段文本,一个段落可以由多个CharacterRun组成。

  Table:一个表格。

  TableRow:表格对应的行。

TableCell:表格对应的单元格。

Section、Paragraph、CharacterRun和Table都继承自Range。

在我自己的代码中主要用的就是一些POI工具的基础知识,利用range获取word的所有段落,用过循环遍历所有段,再利用characterRun判断字体大小获取标题和解释的文字。

转载于:https://www.cnblogs.com/zhangliqiangvictory/p/10569597.html

利用POI工具读取word文档并将数据存储到sqlserver数据库中的更多相关文章

  1. Python读取word文档内容

    1,利用python读取纯文字的word文档,读取段落和段落里的文字. 先读取段落,代码如下: 1 ''' 2 #利用python读取word文档,先读取段落 3 ''' 4 #导入所需库 5 fro ...

  2. java中读取word文档里的内容

    package com.cn.peitest.excel.word; import java.io.FileInputStream; import java.io.FileOutputStream; ...

  3. C#读取Word文档内容代码

    首先要添加引用com组件:然后引用: using Word = Microsoft.Office.Interop.Word; 获取内容: /// /// 读取 word文档 返回内容 /// //// ...

  4. Python读取word文档(python-docx包)

    最近想统计word文档中的一些信息,人工统计的话...三天三夜吧 python 不愧是万能语言,发现有一个包叫做 docx,非常好用,具体查看官方文档:https://python-docx.read ...

  5. C# 设置、删除、读取Word文档背景——基于Spire.Cloud.Word

    Spire.Cloud.Word.Sdk提供了接口SetBackgroudColor().SetBackgroudImage().DeleteBackground().GetBackgroudColo ...

  6. [转载]linux上用PHP读取WORD文档

    在linux上用PHP读取WORD文档,其实是使用了 antiword程序把word文档转化为txt文档. 再使用php执行系统命令调用而已. 具体操作如下: 1.安装antiword 官方站:htt ...

  7. C#动态生成Word文档并填充数据

    C#也能动态生成Word文档并填充数据 http://www.cnblogs.com/qyfan82/archive/2007/09/14/893293.html 引用http://blog.csdn ...

  8. poi 读取word文档

    1.导入jar包 官网下载地址: https://www.apache.org/dyn/closer.lua/poi/release/bin/poi-bin-3.17-20170915.zip 最开始 ...

  9. java 使用poi读取word文档存入数据库

    使用的poi jar包需要自己下载 读取的word文档中含有多个图片,所以分为两个部分,一个部分读取各个表格中内容,一个是将所有图片截取出来: /** * 遍历段落内容 * docxReadPath ...

随机推荐

  1. Redis 设计与实现笔记 - SDS

    Redis 中的字符串没有使用 C语言中的字符指针(char *),而是使用了自定义的结构 sds. 文件: sds.h sds.c 结构: struct sdshdr { int len; // 填 ...

  2. web font各浏览器兼容问题以及格式

    语法: @font-face { font-family: <identifier>; src: <fontsrc> [, <fontsrc>]*; <fon ...

  3. 如何连接到Oracle数据库?

    如何连接到Oracle数据库?   使用SQL * Plus连接Oracle数据库服务器 SQL * Plus是交互式查询工具,我们在安装Oracle数据库服务器或客户端时会自动安装.SQL * Pl ...

  4. 数据结构和算法(Golang实现)(30)查找算法-2-3-4树和普通红黑树

    文章首发于 阅读更友好的GitBook. 2-3-4树和普通红黑树 某些教程不区分普通红黑树和左倾红黑树的区别,直接将左倾红黑树拿来教学,并且称其为红黑树,因为左倾红黑树与普通的红黑树相比,实现起来较 ...

  5. String与StringBuffer和StringBuilder的根本区别(String为什么无法修改字符串长度)

    从网上看了很多的信息,说的大部分是关于final修饰的原因,却没有详细的解释!根据自己收集的资料,跟大家分享一下我的观点(有错请指正).1.我们都知道在修改字符串长度的时候,StringBuffer和 ...

  6. hadoop(五)scp命令copy文件和配置(完全分布式准备二)|7

    机器的克隆参考centos7克隆ip|机器名|映射关系|别名配置(hadoop完全分布式准备一) 那么问题来了,如果我们有30台机器,之间可以互相访问,那我们如何快速安装配置环境如jdk hadoop ...

  7. CSS3 制作正方体

    一.预备知识 变形属性 2D变形属性 transform:他是css3中的变形属性: 通过transform(变形) 来实现2d 或者3d 转换,其中2d 有,缩放 scale(x, y) ,移动 t ...

  8. Volatile不保证原子性(二)

    Volatile不保证原子性 前言 通过前面对JMM的介绍,我们知道,各个线程对主内存中共享变量的操作都是各个线程各自拷贝到自己的工作内存进行操作后在写回到主内存中的. 这就可能存在一个线程AAA修改 ...

  9. echarts多个数据添加多个纵坐标

    在我们echarts开发中,肯定会遇到一个问题.那就是当有多个数据且数据大小差距太大时,就会出现有些数据小到看不到的情况.所以在遇到这种情况时,我通常的解决办法就是给他多加一个坐标轴. option  ...

  10. App的数据如何用python抓取

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. App中的数据可以用网络爬虫抓取么 答案是完全肯定的:凡是可以看到的APP数 ...