`
sinye
  • 浏览: 219241 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jacob操作word excel

    博客分类:
  • java
阅读更多

项目开发过程中,需求涉及到了各种文档转换为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代码:

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;
             }
}

调用JAVA代码:

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

}

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

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

分享到:
评论
4 楼 lkj107 2010-02-24  
jacob都1.9了啊,07年的时候在jacob和poi之间进行了比较,最终选择了poi
3 楼 sinye 2010-02-05  
strInfo=strInfo.replace("我爱JAVA","我爱中国");
strInfo=strInfo.replace("<td","<td nowrap");


就这两句,不知道为什么没变红色,反而用代码的形式给显示出来了!
2 楼 sinye 2010-02-05  
elvishehai 写道
很好啊。学习了一下,对了,楼主可以问你一下如果我要查找word的内容,如
范、刹、镶、裹、泻、镀、润、杰、这些文字在word中找出来,再标注或是加一个下划线,应该怎么做了

只是给你提供一种思路,我以前的项目中也有类似的要求。在你将word转成html时,刚转成的html作为临时文件,然后通过java的文件读写流,将其中的内容置换成你要的内容,然后再保存为新的文件,删除那个旧的临时文件,比如转换出来的html里想将"我爱JAVA"换成"我爱中国",或者将<td>里的内容换成不换行<td nowrap>。你的那个要求以此类推就可以了。详见如下的JAVA代码:注意红色部分,就是你要改动的地方
/**
	 * 
	 * @Function     //CreateFormallyHtml
	 * @Description  //读取临时生成的网页文件,修改其中的内容后生成正式的网页文件,并删除临时网页文件
	 * @Input        //临时网页文件全路径,新网页文件全路径
	 * @Return       //布尔型,成功则返回true,否则返回false
	 */
	public boolean CreateWordHtml(String strFile,String strNewHtml)
	{
		Boolean blStatus=false;
		
		String strInfo=null;
		//读取网页文件
		try 
		 {
			FileInputStream  fis=new FileInputStream(strFile);
			InputStreamReader isr=new InputStreamReader(fis);
			BufferedReader buf=new BufferedReader(isr);
			int i=0;
			String  c;
			try 
			{
				while((c=buf.readLine())!=null)
				{
				   if(i==0){strInfo=c;}
				   else{strInfo=strInfo+"\n"+c;}
				   i++;			   		  	
				}
				buf.close();
				isr.close();
				fis.close();
			} 
			catch (IOException e){e.printStackTrace();}
		 } 
		 catch (FileNotFoundException e) {e.printStackTrace();}
		
		 //处理网页内容,并重新生成新的网页文件
		 try
		 {
		 	 File write = new File(strNewHtml);		     	 
		     BufferedWriter bw = new BufferedWriter(new FileWriter(write));
		     [color=red]strInfo=strInfo.replace("我爱JAVA","我爱中国");
		     strInfo=strInfo.replace("<td","<td nowrap");[/color]
		     
		     bw.write(strInfo);
		     bw.close();
		     
		     blStatus=true;
		 }
		 catch (IOException ee) {System.out.println(ee.getMessage());}
		 
		 //删除临时生成的网页文件及其附属文件夹
		 try
		 {	 	 
		 	 File fl = new File(strFile);
		 	 if(fl.exists() && fl.isFile()){fl.delete();}//删除临时网页 
			 int intLen=strFile.lastIndexOf(".");
			 String strFileFolder=strFile.substring(0,intLen+1)+"files";
		 	 delFolder(strFileFolder);//删除临时网页附属的文件夹
	   	 }
		catch (Exception ee) {System.out.println(ee.getMessage());}
		 
		 
		return blStatus;
	}
1 楼 elvishehai 2010-02-05  
很好啊。学习了一下,对了,楼主可以问你一下如果我要查找word的内容,如
范、刹、镶、裹、泻、镀、润、杰、这些文字在word中找出来,再标注或是加一个下划线,应该怎么做了

相关推荐

    JACOB操作word和excel示例

    本文将深入探讨如何使用Jacob库来操作Word和Excel,通过提供的示例文档,我们将理解如何进行文件转换和其他操作。 首先,Jacob全称为Java COM Bridge,是一个Java到COM(Component Object Model)桥接器,它使得...

    jacob实例 word excel pdf

    Jacob虽然主要用于与Word和Excel的交互,但处理PDF文件时,通常需要结合其他库,如Apache POI或iText,因为Jacob本身并不直接支持PDF操作。你可以先使用Jacob将Word或Excel文档转换为PDF,然后使用专门处理PDF的库...

    jacob操作word文件

    Jacob库在Java中用于操作Microsoft Office应用程序,如Word、Excel等。这个库是Java和COM接口之间的桥梁,允许Java程序能够调用COM组件,从而实现对Office文档的创建、编辑和格式化等功能。在给定的代码片段中,`...

    jacob操作WPS、Office对应Word、Excel、PPT生成PDF

    jacob操作WPS、Office对应Word、Excel、PPT生成PDF,采用版本为jaco1.7X。

    jacob操作word,excel(图表,表格等)代码

    在这个主题下,我们将深入探讨如何使用Jacob来操作Word和Excel,特别是在生成报告、处理数据和展现图表方面。 1. **Jacob简介**: Jacob全称为Java COM Bridge,它通过JNI(Java Native Interface)技术实现了Java...

    jacob解析word excel附件

    jacob解析word excel的jar包 dll文件

    Jacob Word excel 转PDF 合并PDF文件

    标题提到的"Jacob Word excel 转PDF 合并PDF文件"是指使用Jacob库来将Microsoft Word和Excel文档转换为PDF格式,并进一步合并多个PDF文件。Jacob(Java Advanced COM Bridge)是一个Java库,它允许Java应用程序与...

    jacob_1.9 使用Jacob转换Word,Excel为HTML

    jdk1.6 以上版本测试可用的 jacob_1.9使用Jacob转换Word,Excel为HTML 源码测试程序 及 工具,使用时 将 jacob.dll 放在 系统Java\jdk1.6.0_10\jre\bin目录下即可,jar 看项目需求放置添加到工程

    Jacob操作word 文档的方法集!(含创建目录),使用的Jacob版本是1.5

    Jacob是一个Java库,它提供了一个接口来调用Microsoft Office应用程序,如Word,Excel和PowerPoint。这个库使得在Java程序中处理Office文档成为可能,无需使用COM(Component Object Model)编程。在这个“Jacob操作...

    jacob将word、excel转为pdf

    jacob将word、excel转为pdf

    java使用jacob将word,excel,ppt转成html

    下面,我们将详细探讨如何使用 Jacob 实现 Word、Excel 和 PowerPoint 文件到 HTML 的转换。 1. **Java 与 Jacob 集成** - 在 Java 项目中引入 Jacob 库,通常需要将 `jacob-x.x.x.dll` 文件放在系统的 PATH 环境...

    jacob操作word文档

    Jacob全称为Java-COM Bridge,是一个开源项目,它的主要作用是提供了一个桥梁,使得Java应用程序能够调用COM组件,进而与Windows系统上的Office应用(如Word、Excel等)进行交互。Jacob通过JNI(Java Native ...

    Jacob 操作WORD 完整实例 附带JAR DLL

    Jacob是一款Java库,它允许Java程序直接调用Microsoft Office应用程序,如Word、Excel和PowerPoint,来进行自动化操作。这个“Jacob 操作WORD 完整实例 附带JAR DLL”很可能是提供了一个详细的示例,教你如何使用...

    一次jacob操作word的总结

    本文将深入探讨如何使用Jacob在服务器端操作Word文档。 首先,导入必要的包,包括`com.setpower.sysfun.service`、`java.io.File`、`java.util.HashMap`、`java.util.Iterator`、`java.util.List`以及Jacob的`...

    jacob读取word表格

    标题“jacob读取word表格”涉及到的是使用Jacob库来操作Microsoft Word文档,特别是从中读取表格数据。Jacob是一个Java到COM桥接库,允许Java应用程序调用COM组件,如Microsoft Office的应用程序。 在Java中,直接...

    有关jacob的word操作研究

    Jacob是Java语言中用于与Microsoft Office进行交互的库,它允许开发者通过COM接口来操作Word、Excel等Office应用。在本文中,我们将深入探讨如何使用Jacob进行Word文档的操作。 首先, Jacob的核心在于...

    如何利用Java-JACOB操作WORD文档

    Java-JACOB库提供了一种方式让Java程序与Microsoft的COM接口进行交互,使得开发者能够直接在Java应用中操作如MS Word和Excel等Office应用程序。本文主要探讨如何使用Java-JACOB来创建和操作Word文档。 首先,使用...

    Jacob操作Excel

    Jacob非常适合那些需要在Java环境中操作Office文档(如Word、Excel)的应用场景。 #### 二、Jacob操作Excel基本流程 使用Jacob操作Excel主要包括以下几个步骤: 1. **初始化Excel对象**:创建Excel应用程序实例。...

    Java 使用 jacob 将office中 word excel ppt 转成pdf

    资源中包括工具类、jacob.jar和jacob-1.18-x64.dll(64位)、jacob-1.18-x86.dll(32位) 在使用jacob时,我们需要将jacob-1.18-x64.dll或jacob-1.18-x86.dll放到jdk的bin目录下或者jdk/jre的bin目录下才可以使用。

    jacob 操作word完整代码实例,绝对实用

    Jacob是一个Java库,它提供了对Microsoft Office应用程序,如Word、Excel和PowerPoint的自动化支持。这个库通过COM接口与Office应用程序交互,使得Java开发者能够直接在Java程序中创建、编辑和控制Office文档。在这...

Global site tag (gtag.js) - Google Analytics