现在的位置: 首页 > 综合 > 正文

jacob操作word excel 将word excel转换成网页形式

2018年02月06日 ⁄ 综合 ⁄ 共 3948字 ⁄ 字号 评论关闭

 

jacob操作word excel(来自http://sinye.iteye.com/blog/588050)

项目开发过程中,需求涉及到了各种文档转换为HTML或者网页易显示格式,现在将实现方式整理如下:
一、了解Jacob

先了解一下概念,JACOB 就是 JAVA-COM Bridge的缩写,提供自动化的访问com的功能,也是通过JNI功能访问windows平台下的com组件或者win32系统库的。这是一个开始于1999年的开源项目的成果,有很多使用者对该项目进行了修改,做出了自己的贡献。

下载地址:http://sourceforge.net/project/showfiles.php?group_id=109543&package_id=118368
二、Jacob安装

1、我们解开下载的jacob_1.9.zip,在文件夹中找到jacob.dll和jacob.jar两个文件
2、将压缩包解压后,Jacob.jar添加到Libraries中;
3、将Jacob.dll放至“WINDOWS\SYSTEM32”下面。
需要注意的是:
【使用IDE启动Web服务器时,系统读取不到Jacob.dll,例如用MyEclipse启动Tomcat,就需要将dll文件copy到MyEclipse经本人实践,发现此处应为JDK,不然会有问题哦)安装目录的“jre\bin”下面。最后需要关闭MyEclipse,再重启。
一般系统没有加载到Jacob.dll文件时,报错信息为:“java.lang.UnsatisfiedLinkError: no jacob in java.library.path”】

三、使用Jacob转换Word,Excel为HTML

JAVA代码:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;

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

public class TransformFiletoHtml
{
	int WORD_HTML = 8;
	int WORD_TXT = 7;
	int EXCEL_HTML = 44;
		
	/**
	 * WORD转HTML
	 * @param docfile WORD文件全路径
	 * @param htmlfile 转换后HTML存放路径
	 */
	public void wordToHtml(String docfile, String htmlfile)
	{
		ActiveXComponent app = new ActiveXComponent("Word.Application"); // 启动word
		try
		{
			app.setProperty("Visible", new Variant(false));
			Dispatch docs = app.getProperty("Documents").toDispatch();
			Dispatch doc = Dispatch.invoke(docs,"Open",Dispatch.Method,new Object[] { docfile, new Variant(false),new Variant(true) }, new int[1]).toDispatch();
			Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {htmlfile, new Variant(WORD_HTML) }, new int[1]);
			Variant f = new Variant(false);
			Dispatch.call(doc, "Close", f);
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			app.invoke("Quit", new Variant[] {});
		}
	}
	
	/**
	 * EXCEL转HTML
	 * @param xlsfile EXCEL文件全路径
	 * @param htmlfile 转换后HTML存放路径
	 */
	public void excelToHtml(String xlsfile, String htmlfile)
	{
		ActiveXComponent app = new ActiveXComponent("Excel.Application"); // 启动excel
		try
		{
			app.setProperty("Visible", new Variant(false));
			Dispatch excels = app.getProperty("Workbooks").toDispatch();
			Dispatch excel = Dispatch.invoke(excels,"Open",Dispatch.Method,new Object[] { xlsfile, new Variant(false),new Variant(true) }, new int[1]).toDispatch();
			Dispatch.invoke(excel, "SaveAs", Dispatch.Method, new Object[] {htmlfile, new Variant(EXCEL_HTML) }, new int[1]);
			Variant f = new Variant(false);
			Dispatch.call(excel, "Close", f);
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			app.invoke("Quit", new Variant[] {});
		}
	}
	
	/**
	 * /删除指定文件夹
	 * @param folderPath 文件夹全路径
	 * @param htmlfile 转换后HTML存放路径
	 */
	 public void delFolder(String folderPath) 
                {
	     try 
	     {
	        delAllFile(folderPath); //删除完里面所有内容
	        String filePath = folderPath;
	        filePath = filePath.toString();
	        java.io.File myFilePath = new java.io.File(filePath);
	        myFilePath.delete(); //删除空文件夹
	     } catch (Exception e) {e.printStackTrace();}
	}
	
	/**
	 * /删除指定文件夹下所有文件
	 * @param path 文件全路径
	 */
	public boolean delAllFile(String path) 
	   {
	       boolean flag = false;
	       File file = new File(path);
	       if (!file.exists()) 
	       {
	         return flag;
	       }
	       if (!file.isDirectory()) 
	       {
	         return flag;
	       }
	       String[] tempList = file.list();
	       File temp = null;
	       for (int i = 0; i < tempList.length; i++) 
	       {
	          if (path.endsWith(File.separator)) 
	          {
	             temp = new File(path + tempList[i]);
	          } 
	          else 
	          {
	              temp = new File(path + File.separator + tempList[i]);
	          }
	          if (temp.isFile()) 
	          {
	             temp.delete();
	          }
	          if (temp.isDirectory()) 
	          {
	             delAllFile(path + "/" + tempList[i]);//先删除文件夹里面的文件
	             delFolder(path + "/" + tempList[i]);//再删除空文件夹
	             flag = true;
	          }
	       }
	       return flag;
             }
}

调用JAVA代码:

public class Test1 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		TransformFiletoHtml trans = new TransformFiletoHtml();
		trans.wordToHtml("D:\\sinye.doc", "D:\\sinye.html");
	}

}
 只写了一个测试word转html的,excel转html的同理,在TransformFiletoHtml类中,写了两个方法,一个是删除文件夹的方法(delFolder()),一个是删除文件夹下所有文件的方法(delAllFile())。写这个的目的是出于:在word或者excel转html的过程中,除了生成制定的html页面外,jacob组件会生成一些转换html页面时相关的其它页面,但是这些相关的其它页面不是我们所需要的,因此想把它删除,其实不删除也可以,只是看着不爽,在测试中,发现,word有时不会生成这样的文件,而且即使生成了,也能删除掉,但是excel生成的文件却不能删除,还望高手们给予解答。

另外,在你将excel转换html时,如果你的代码没问题,转换时,老提示什么存在用户区域的安全设置这什么的,会让你选择继续转换,还是取消。这是因为你转换的那个excel中写了保护,解决办法是在excel的工具->保护->允许用户编辑区域,删除里面的所有保护。

抱歉!评论已关闭.