Java开发中解析word文档录入数据库

  • 目录
  • 1.解决思路
  • 2.导入的包
  • 3.安装环境
  • 4.代码
  • 5.后续

 

1.解决思路

       最开始思路是使用POI,因为常见的解析文档的格式是excel,用的就是POI。但是在网上找了两天别人分享的方法POI没有一个可以实现的,最后老大给了一个思路是先转将Word文档转为HTML文件,再来解析HTML文件,事实证明是可行的。

2.导入的包

       jacob.jar、jsoup-1.12.1.jar

3.安装环境

    1.用jacob. 先到官方网站上去下载:http://sourceforge.net/project/showfiles.php?group_id=109543&package_id=118368 jacob.zip 把jacob.jar放到项目/web-inf/lib下面。把jacob .dll放到C:\Program Files\Java\jdk1.8.0_45\bin下面。这样就算是配置完成了。 
      2.要求需要安装微软的打开Word办公软件,因为它的方法是通过在后台调用office将Word转为html,WORD软件打开一个word文件,另存为实现的。找到办公软件的web选项设置:将编码设置为UTF-8.要不打开的时候无法看到汉字,但是解析是没有影响。

    3.电脑需要安装微软的word办公软件,WPS是不行的。

 

4.代码

package Test;

import java.io.File;
import java.io.IOException;

import java.util.List;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.junit.Test;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

/**
 * 1.用jacob. 先到官方网站上去下载:http://sourceforge.net/project/showfiles.php?group_id=109543&package_id=118368 jacob.zip
 * 把jacob.jar放到项目/web-inf/lib下面。把jacob .dll放到C:\Program Files\Java\jdk1.8.0_45\bin下面。这样就算是配置完成了。 
 * 
 * 2.要求需要安装微软的打开Word办公软件,因为它的方法是通过在后台调用office将Word抓html
 * 	WORD软件打开一个word文件,另存为,找到web选项设置:将编码设置为UTF-8.要不打开的时候无法看到汉字,但是解析是没有影响
 * 
 * 3.jsoup的API
 * @author admin
 *
 */
public class Word_Xml_Test {
	
	/**
	 * 
	 * @param docPath		word文件路径及名称
	 * @param fileName		html文件路径及名称
	 */
	public void word_html (String docPath,String fileName){

		//创建Word对象,启动WINWORD.exe进程
		ActiveXComponent app = new ActiveXComponent("Word.Application");
		//设置用后台隐藏方式打开
		app.setProperty("Visible", new Variant(false));
		//获取操作word的document调用
		Dispatch documents = app.getProperty("Documents").toDispatch();
		//调用打开命令,同时传入word路径
		Dispatch doc = Dispatch.call(documents, "Open", docPath).toDispatch();
		//调用另外为命令,同时传入html的路径
		Dispatch.invoke(doc, "SaveAs", Dispatch.Method, 
			new Object[] { fileName, new Variant(8) }, new int[1]);
		//关闭document对象
		Dispatch.call(doc, "Close", new Variant(0));
		//关闭WINWORD.exe进程
		Dispatch.call(app, "Quit");
		//清空对象
		doc = null;
	}
	
	/**
	 * 解析html文件
	 * 注:编码必须为GB2312
	 * @param fileName	文件路径
	 * @throws IOException
	 */
	public void html_prasel(String fileName) throws IOException{
		File html = new File(fileName);        
		Document doc = Jsoup.parse(html, "GB2312", "");    
			
		//求职意向table加培训经历
//		Elements trs = doc.select("table:eq(2) ").select("tr").select("td").select("p");
				
		//1.待定位:工作经验,但是带出了个人信息之后的值,是否可以利用中间的空值来取值
		Elements trs = doc.select("table:eq(4)").select("tr").select("td").select("p");
		
		//2.定位成功:项目经验的table
//		Elements trs = doc.select("table:eq(6)").select("tr").select("td").select("p");
		//System.out.println(doc.select("table:eq(6)").toString());
		
		//3.定位成功:教育经历的table
//		Elements trs = doc.select("table:eq(8)").select("tr").select("td").select("p");
		
		//4.定位成功:在校成绩
//		Elements trs = doc.select("table:eq(10)").select("tr").select("td").select("p");
		
		//5.定位成功:技能特长与培训经历,他们之间有空值,可做判断
//		Elements trs = doc.select("table:eq(12)").select("tr").select("td").select("p");
			
		//定位成功:工作经验
//		List trs1 = doc.select("table:eq(4)").select("tr").select("td").select("p").subList(22, 38);
							
      for(int i = 0;i

5.后续

     由于我的需求是将前程无忧、智联招聘、BOOS直聘的简历解析之后入库,目前解析的时候遇到了,有些模块解析的时候带入了其它模块的值,经过反复测试发现,可以使用它的CSS选择器进行定位,后续的解决方案后续再上传。

 

 

你可能感兴趣的:(后端-Java-word文档,Java后端)