原本的需求是,检测用户电脑上是否已安装word、excel,如果是那就执行转成html的操作,
其中需求的库有jacob和jRegistry
jacob:http://sourceforge.net/projects/jacob-project/files/jacob-project/ 这是一个把word、excel啦转换成html的库。
jRegistry:http://sourceforge.net/projects/jregistry/files/jregistry/ 这个是使用java语言操作windows的注册表的库。
这个库都有1一个.jar和.dll文件,
jar放到类路径,dll放到 c:\windows\system32 (如果是web项目请把dll放到jre的bin目录下)
下面这段代码的意图,在执行下面的转换操作之前做个判断,判断是否安装了excel:
/**
* 检测系统是否存在Excel软件,该方法通过读取注册表里的 [.xls]
* 打开方式的默认值确定打开excel文件的软件,有默认值就说明安装了相应软件。
*
* @return 存在返回true,否为false
*/
public static boolean checkExcelIsExists() {
RegistryKey r = new RegistryKey(
RegistryKey
.getRootKeyForIndex(RegistryKey.HKEY_CLASSES_ROOT_INDEX),
".xls");
if (r.hasDefaultValue()) {
System.out.println("本机可以打开Excel文件");
return true;
}
return false;
}
使用jacob转换为html文件:
/**
* word 文件转换为html文件
*
* @param docFile
* @param htmlFile
*/
public static void WordTransHtml(String docFile, String htmlFile) {
ActiveXComponent app = new ActiveXComponent("Word.application");
// ActiveXComponent xl = new ActiveXComponent("Excel.Application");
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(8) }, new int[1]);
Variant f = new Variant(false);
Dispatch.call(doc, "Close", f);
} finally {
app.invoke("Quit", new Variant[] {});
}
}
/**
* 转换Excel文件成HTML文件
*
* @param xlsfile
* excel文件全路径
* @param htmlfile
* html文件全路径
*/
public static void ExcelTransHtml(String xlsfile, String htmlfile) {
ActiveXComponent app = new ActiveXComponent("Excel1.Application");
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(44) }, new int[1]);
Variant f = new Variant(false);
Dispatch.call(excel, "Close", f);
} catch (Exception e) {
e.printStackTrace();
} finally {
app.invoke("Quit", new Variant[] {});
}
}
来源:oschina
链接:https://my.oschina.net/u/135304/blog/62559