原本的需求是,检测用户电脑上是否已安装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[] {}); } }