主题:jacob操作word excel

项目开发过程中,需求涉及到了各种文档转换为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安装目录的“jre\bin”下面。 
一般系统没有加载到Jacob.dll文件时,报错信息为:“java.lang.UnsatisfiedLinkError: no jacob in java.library.path”】

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

JAVA代码:

Java代码
 
 

  1. import java.io.BufferedReader;
  2. import java.io.BufferedWriter;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileWriter;
  7. import java.io.IOException;
  8. import java.io.InputStreamReader;
  9. import com.jacob.activeX.ActiveXComponent;
  10. import com.jacob.com.Dispatch;
  11. import com.jacob.com.Variant;
  12. public class TransformFiletoHtml
  13. {
  14. int WORD_HTML = 8;
  15. int WORD_TXT = 7;
  16. int EXCEL_HTML = 44;
  17. /**
  18. * WORD转HTML
  19. * @param docfile WORD文件全路径
  20. * @param htmlfile 转换后HTML存放路径
  21. */
  22. public void wordToHtml(String docfile, String htmlfile)
  23. {
  24. ActiveXComponent app = new ActiveXComponent("Word.Application"); // 启动word
  25. try
  26. {
  27. app.setProperty("Visible", new Variant(false));
  28. Dispatch docs = app.getProperty("Documents").toDispatch();
  29. Dispatch doc = Dispatch.invoke(docs,"Open",Dispatch.Method,new Object[] { docfile, new Variant(false),new Variant(true) }, new int[1]).toDispatch();
  30. Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {htmlfile, new Variant(WORD_HTML) }, new int[1]);
  31. Variant f = new Variant(false);
  32. Dispatch.call(doc, "Close", f);
  33. }
  34. catch (Exception e)
  35. {
  36. e.printStackTrace();
  37. }
  38. finally
  39. {
  40. app.invoke("Quit", new Variant[] {});
  41. }
  42. }
  43. /**
  44. * EXCEL转HTML
  45. * @param xlsfile EXCEL文件全路径
  46. * @param htmlfile 转换后HTML存放路径
  47. */
  48. public void excelToHtml(String xlsfile, String htmlfile)
  49. {
  50. ActiveXComponent app = new ActiveXComponent("Excel.Application"); // 启动excel
  51. try
  52. {
  53. app.setProperty("Visible", new Variant(false));
  54. Dispatch excels = app.getProperty("Workbooks").toDispatch();
  55. Dispatch excel = Dispatch.invoke(excels,"Open",Dispatch.Method,new Object[] { xlsfile, new Variant(false),new Variant(true) }, new int[1]).toDispatch();
  56. Dispatch.invoke(excel, "SaveAs", Dispatch.Method, new Object[] {htmlfile, new Variant(EXCEL_HTML) }, new int[1]);
  57. Variant f = new Variant(false);
  58. Dispatch.call(excel, "Close", f);
  59. }
  60. catch (Exception e)
  61. {
  62. e.printStackTrace();
  63. }
  64. finally
  65. {
  66. app.invoke("Quit", new Variant[] {});
  67. }
  68. }
  69. /**
  70. * /删除指定文件夹
  71. * @param folderPath 文件夹全路径
  72. * @param htmlfile 转换后HTML存放路径
  73. */
  74. public void delFolder(String folderPath)
  75. {
  76. try
  77. {
  78. delAllFile(folderPath); //删除完里面所有内容
  79. String filePath = folderPath;
  80. filePath = filePath.toString();
  81. java.io.File myFilePath = new java.io.File(filePath);
  82. myFilePath.delete(); //删除空文件夹
  83. } catch (Exception e) {e.printStackTrace();}
  84. }
  85. /**
  86. * /删除指定文件夹下所有文件
  87. * @param path 文件全路径
  88. */
  89. public boolean delAllFile(String path)
  90. {
  91. boolean flag = false;
  92. File file = new File(path);
  93. if (!file.exists())
  94. {
  95. return flag;
  96. }
  97. if (!file.isDirectory())
  98. {
  99. return flag;
  100. }
  101. String[] tempList = file.list();
  102. File temp = null;
  103. for (int i = 0; i < tempList.length; i++)
  104. {
  105. if (path.endsWith(File.separator))
  106. {
  107. temp = new File(path + tempList[i]);
  108. }
  109. else
  110. {
  111. temp = new File(path + File.separator + tempList[i]);
  112. }
  113. if (temp.isFile())
  114. {
  115. temp.delete();
  116. }
  117. if (temp.isDirectory())
  118. {
  119. delAllFile(path + "/" + tempList[i]);//先删除文件夹里面的文件
  120. delFolder(path + "/" + tempList[i]);//再删除空文件夹
  121. flag = true;
  122. }
  123. }
  124. return flag;
  125. }
  126. }

调用JAVA代码:

Java代码
 
 

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

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

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

时间: 2024-08-03 21:48:41

主题:jacob操作word excel的相关文章

Aspose是一个很强大的控件,可以用来操作word,excel,ppt等文件

Aspose是一个很强大的控件,可以用来操作word,excel,ppt等文件,用这个控件来导入.导出数据非常方便.其中Aspose.Cells就是用来操作Excel的,功能有很多.我所用的是最基本的功能,读取Excel的数据并导入到Dataset或数据库中.读取Excel表格数据的代码如下: 首先要引入命名空间:using Aspose.Cells; Workbook workbook = new Workbook(); workbook.Open("C:\\test.xlsx");

在Java中如何操作word, excel, pdf文件

java操作word,excel,pdf 在平常应用程序中,对office和pdf文档进行读取数据是比较常见的功能,尤其在很多web应用程序中.所以今天我们就简单来看一下java对word.excel.pdf文件的读取.本篇博客只是讲解简单应用.如果想深入了解原理.请读者自行研究一些相关源码. 首先我们来认识一下读取相关文档的jar包: 1. 引用POI包读取word文档内容 poi.jar 下载地址 http://apache.freelamp.com/poi/release/bin/poi-

Java使用Jacob操作word

近期项目需要根据word模板动态生成word文档,在网上看了些资料,在介绍的几种方法中选择了jacob方式,根据网上的资料,能解决大部分的问题,比如,生成表格,设置字体.段落格式,插入图片.设置图片格式. 可是项目中生成的word 文档还需要生成目录页,分割章节,网上找了很多资料,都没找到相关的方法,最后看到一篇博客,提供了一个思路,Java通过jacob操作office的宏,加上之前有过写宏的经验,一步步的实验终于搞定了. 博客地址:http://men4661273.iteye.com/bl

jacob 操作word

1. 首先下载jacob-1.18.zip,解压后有两个文件jacob.jar 和 jacob.dll.需要把jacob.jar放到你工程的classpath中并且把jacob.dll放到jdk的bin目录下(D:\Program Files\Java\jdk1.8.0_101\bin)目录下或者系统的system32其他相应的目录下. 2.下面是提供的工具类 1 package com.erqiao.rc.util; 2 3 import com.jacob.activeX.ActiveXCo

jacob操作word (转)

1 /** 2 * 感觉很厉害的样子就转了,原帖地址:http://wang-ping001.iteye.com/blog/1452057 3 */ 4 package com.xaeds.taecs.common.util; 5 6 import com.jacob.activeX.ActiveXComponent; 7 import com.jacob.com.Dispatch; 8 import com.jacob.com.Variant; 9 10 /** 11 * @author Ad

操作word,Excel,PPT

//C#编程,将Word转PDF,该方法有一定弊端,但是比起网路上的其他方法来说,还算比较好的,弊端是需要客户机上安装有WORD 2007或更高的版本.       //1.添加引用: Microsoft.Office.Interop.Word版本12.0.0.0:       // 2.在开头添加命名空间引用:using Microsoft.Office.Interop.Word;       //3.具体实现方法如下:       //Word转换成pdf       ///<summary

Jacob操作office文档(Word,PPT,Excel)

public boolean doc2pdf(String srcFilePath, String pdfFilePath) { ActiveXComponent app = null; Dispatch doc = null; try { ComThread.InitSTA(); app = new ActiveXComponent("Word.Application"); app.setProperty("Visible", false); Dispatch d

java调用com组件操作word使用总结(jacob)

ava调用com组件操作word使用总结(jacob) 简单描述 在此处输入简单摘要 特别声明:使用java-com技术可以完成任何VBA可以完成的office文档操作; 一.准备工作 先了解一下概念,JACOB 就是 JAVA-COM Bridge的缩写,提供自动化的访问com的功能,也是通过JNI功能访问windows平台下的com组件或者win32系统库的.这是一个开始于 1999年的开源项目的成果,有很多使用者对该项目进行了修改,做出了自己的贡献. Jacob下载地址: http://s

使用jacob打印word或excel

在看PDF打印的时候顺便也看了看word和excel的打印,这里只简单的知道如何使用,原理没有深究~ 首先这里只说打印,至于生成word或者excel,可以使用poi(jacob貌似也可以) JACOB是一个 JAVA到微软的COM接口的桥梁.使用JACOB允许任何JVM访问COM对象,从而使JAVA应用程序能够调用COM对象.如果你要对 MS Word.Excel 进行处理,JACOB 是一个好的选择. 而关于打印的话,总结起来有这么几个步骤. 1.使用Jacob创建 ActiveX部件对象: