利用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判断字体大小获取标题和解释的文字。



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

今天实现了利用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判断字体大小获取标题和解释的文字。