一、了解Jacob

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

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安装目录的“jre\bin”下面。

一般系统没有加载到Jacob.dll文件时,报错信息为:“java.lang.UnsatisfiedLinkError: no jacob in java.library.path”】

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

JAVA代码:

TransformFiletoHtml.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;

}

}

//测试类代码

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");

}

}

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

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐