码迷,mamicode.com
首页 > 其他好文 > 详细

主题:jacob操作word excel

时间:2015-09-16 22:05:55      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

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

调用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.   
  8. }  

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

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

主题:jacob操作word excel

标签:

原文地址:http://my.oschina.net/baochanghong/blog/507012

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!