zoukankan      html  css  js  c++  java
  • 利用POI工具读取word文档并将数据存储到sqlserver数据库中

    今天实现了利用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("
    ", "");//取这一段为当前的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("
    ", "");//把解释段落合并成一个字符串
                                
                              }
                              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判断字体大小获取标题和解释的文字。



  • 相关阅读:
    Linux编程 22 shell编程(输出和输入重定向,管道,数学运算命令,退出脚本状态码)
    mysql 开发进阶篇系列 46 物理备份与恢复( xtrabackup的 选项说明,增加备份用户,完全备份案例)
    mysql 开发进阶篇系列 45 物理备份与恢复(xtrabackup 安装,用户权限,配置)
    mysql 开发进阶篇系列 44 物理备份与恢复( 热备份xtrabackup 工具介绍)
    Linux编程 21 shell编程(环境变量,用户变量,命令替换)
    Linux编程 20 shell编程(shell脚本创建,echo显示信息)
    mysql 开发进阶篇系列 43 逻辑备份与恢复(mysqldump 的基于时间和位置的不完全恢复)
    Linux编程 19 编辑器(vim 用法)
    (网页)angularjs中的interval定时执行功能(转)
    (网页)在SQL Server中为什么不建议使用Not In子查询(转)
  • 原文地址:https://www.cnblogs.com/zhangliqiangvictory/p/10569597.html
Copyright © 2011-2022 走看看