`
kevin_wanwei
  • 浏览: 117668 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Jacob操作Word详细教程

阅读更多

           首先,大家先要了解一下jacob ,官方的解释是Java COM Bridge,即java和 com组件间的桥梁,这里说说为什么我们用jacob操纵word。而不直接使用java去做?

这要原因:在Java开源世界没有很好工具来操作Word文档,POI对word操作还是很不完善,所以我们无法使用它很方便操作word文档来满足我们需求。相比之下使用jacob操作word文档非常方便。也比较容易。

         jacob 下载地址:http://danadler.com/jacob/这个网址还可以下载到源码和例子程序

         jacob 使用方法:将jacob1.7里面jacob.jar添加到我们应用程序环境中,并将 jacob.dl(l就是我前面说的com组件)把放到c:/windows/system32下。如果是web环境中,需要将jacod.jar放到Tomcat的lib目录下.(如果用Tomcat服务器)

        值得注意的是,不同的版本的系统使用不同的dll文件
所以如果你编译成功,但运行失败一般是dll文件问题
遇到这种情况,可以到
http://downloads.sourceforge.net/jacob-project/jacob_1.9.zip?modtime=1109437002&big_mirror=0
下载其他的版本的 dll 文件。

 

下面这段程序是我在别人代码基础上进行一些改进(增加了一些新方法,渴望各位同行批评指正)

package com.bperp.word.util;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class WordWriter {
		
	private WordOperator word;
	
	public WordWriter(String filePath){
		word=new WordOperator();
		word.openDocument(filePath);
	}
	
	public WordWriter(InputStream input,String filePath,String fileName) throws Exception{
		String path=saveAsDocFile(input,filePath,fileName);
		word=new WordOperator();
		word.openDocument(path);
	}
	/**
	 * 将word文档输入流保存为本地得到word文件
	 * @param input
	 * @param filePath
	 * @param fileName
	 * @throws Exception
	 */
	@SuppressWarnings("unused")
	private String saveAsDocFile(InputStream input,String filePath,String fileName)throws Exception{
		if(!StringUtils.isValidateString(filePath)||!StringUtils.isValidateString(fileName)){
			throw new Exception("The filePath or fileName is error");
		}
		if(input==null){
			throw new Exception("InputStream is null");
		}
		File file=new File(filePath);
		
		if(!file.exists()){
			throw new Exception(" The FilePath is null");
		}
		filePath = validateFilePath(filePath);
		fileName = getRandomFileName(fileName);
	    InputStream	in=null;
	    OutputStream out=null;
	    try{
		    in=new BufferedInputStream(input);
			out=new BufferedOutputStream(new FileOutputStream(filePath+fileName));
			byte[] b=new byte[1024];
			for(int p=0; (p=in.read(b))!=-1;){
				out.write(b);
				out.flush();
			}
	    }finally{
	    	if(out!=null){
	    		out.close();
	    	}
	    	if(in!=null){
	    		in.close();
	    	}
	    }
	    return filePath+fileName;
	}
	/**
	 * 验证Word文件路径
	 * @param filePath
	 * @return
	 */
	private String validateFilePath(String filePath) {
		if((filePath.lastIndexOf("\\\\")==-1)&&(filePath.lastIndexOf("/")==-1)){
			filePath=filePath+"/";
		}
		return filePath;
	}
	/**
	 * 生成一个新的文件名(保证文件名不相同)
	 * @param fileName
	 * @return
	 */
	private String getRandomFileName(String fileName) {
		fileName= fileName + "_"+ new SimpleDateFormat("yyyyMMddHHmmssZ").format(new Date())+".doc";
		return fileName;
	}
	/**
	 * replaceText
	 * @param map
	 */
	public void replaceAllText(Map<String,String> map){
		if(map==null){
			return;
		}
		Set<String> keys=map.keySet();
		Iterator<String> it=keys.iterator();
		while(it.hasNext()){
			String key=it.next();
				word.replaceAllText(key, map.get(key));
		}
	}
	/**
	 * add details
	 * @param values
	 */
	public void insertContextInRow(List<Map<String,String>> values,int tableIndex){
		if(tableIndex<=1){
			tableIndex=1;
		}
		if(values==null||values.size()<=0){
			return;
		}
		int[] p=null;
		Map<String,String> m=values.get(0);
		Set<String> keys=m.keySet();
		Iterator<String> it=keys.iterator();
		while(it.hasNext()){
			String str=it.next();
			
			int[] a=word.getTableCellPostion(str, tableIndex);
			if(a!=null&&a[0]!=0){
				p=a;
			}
			
		}
		if(p!=null&&p[0]!=0){
			for(int i=1;i<values.size();i++){
		      word.addTableRow(tableIndex,p[0]);//在表格插入行数
			}
		}
		
		Iterator<String> it2=keys.iterator();
		while(it2.hasNext()){
			int row=p[0];
			int col=0;
			String str=it2.next();
			
			int[]a=word.getTableCellPostion(str, tableIndex);
			if(a!=null){
				col=a[1];
			}
			for(Map<String,String> map:values){
				word.putTxtToCell(tableIndex, row, col, map.get(str));
				row++;
		    }
		}
		
	}
	
	/**
	 * close document
	 */
	public void close(){
		word.closeDocument();
		word.close();
	}
	/**
	 * 依据Word文件完整路径删除文件
	 * @param path
	 * @throws Exception 
	 */
	public void deleteWordFile(String path) throws Exception{
		File f=new File(path);
		if(!f.exists()){
			throw new Exception("The file is not exists");
		}
		f.delete();
	}
	
	/**
	 * 
	 * @param args
	 * @throws Exception
	 */
	public static void main(String args[]) throws Exception{
		InputStream in=new FileInputStream("d:\\aaa.doc");
		String path="d:\\qq";
		String fileName="aaa";
		WordWriter writer=new WordWriter(in,path,fileName);
		Map<String,String> map1=new HashMap<String,String>();
		map1.put("p21", "上海商哲");
		map1.put("p12", "1550");
		writer.replaceAllText(map1);
		List<Map<String,String>> values =new ArrayList<Map<String,String>>();
		for(int i=0;i<10;i++){
		Map<String,String> map=new HashMap<String,String>();
		map.put("$1", "111111111111");
		map.put("$2", "222222222222");
		map.put("$3", "333333333333");
		map.put("$4", "444444444444");
		map.put("$5", "555555555555");
		map.put("$6", "666666666666");
		values.add(map);
		}
		writer.insertContextInRow(values, 1);
		writer.close();
	}
}

 

5
2
分享到:
评论
5 楼 zihua 2012-09-17  
WordOperator 是你自己写的类吗?
4 楼 aiwwwu 2012-08-23  
博主,你这StringUtils也没有,程序里面也没有说明一下你到底做了哪些功能的示范啊,有点点马虎了~
3 楼 venusf 2012-03-16  
import com.bperp.word.util.StringUtils

楼主这个包在哪里导入啊?

在程序里这个地方会报错,楼主能否把这个文件发给我参考一下? 这是我的邮箱 venusf@163.com  万分感激啊^^
2 楼 xushunwang 2011-01-11  
为什么你的代码中出现的 WordOperator 这个类找不到
1 楼 wangyj0898 2010-05-30  
楼主写的东西都是很实用的,学习了~!

相关推荐

    jacob操作WORD详细 教程和JAR包文件

    在Java中使用Jacob操作Word,你需要完成以下步骤: 1. **引入Jacob库**:将下载的jacob-1.18-M2.zip解压,获取到Jacob的jar文件,将其添加到Java项目的类路径中。 2. **注册Jacob库**:由于Jacob是通过JNI调用COM...

    jacob操作实例+lib

    标题中的“jacob操作实例+lib”指的是使用Jacob库在Java中进行Microsoft Office文档操作的实践案例和相关库文件。Jacob(Java and .NET Bridge)是一个开源Java库,它允许Java应用程序调用.NET组件,包括对Microsoft...

    Jacob 1.16 操作Word表格

    在Java中使用Jacob操作Word表格,你需要创建一个`ActiveXComponent`对象来代表Word应用程序实例。例如: ```java import com.jacob.activeX.ActiveXComponent; import com.jacob.com.ComThread; import ...

    jacob配置以及使用说明

    以下是一个简单的使用Jacob操作Word文档的例子: ```java import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; import com.jacob.com.Variant; public class WordExample { public ...

    jacob-1.15-M3 word操作工具jocab-M3

    Jacob为开发者提供了一套方便的API,使得在Java中操作Word文档变得相对简单,比如创建新文档、打开已有文档、编辑文本、插入图片、设置格式等。 在描述中提到"免费、不描述",这可能意味着该资源是免费提供的,但...

    jacob 包+库+教程

    - **教程**:一些技术博客和论坛上有详细的Jacob教程,包括如何配置环境、如何创建和调用COM对象等步骤。 总的来说,Jacob是Java开发者与Windows COM世界沟通的重要工具,通过学习和掌握Jacob,你可以在Java环境中...

    jacob工具类

    整理了一些jacob操作word的方法 创建替换插入图片,多个word合并,转换pdf等

    jacob打印word和excel,包含dll和jar包

    本教程将详细介绍如何使用Jacob库来打印Word和Excel文档,并提供必要的资源。 首先,Jacob库的核心组件包括`.jar`和`.dll`文件。`.jar`文件是Java类库,包含了Java代码,而`.dll`文件是动态链接库,提供了COM接口的...

    jacob-1.14.3-x64及maven.zip

    2. 使用Jacob,开发者可以访问并操作Word、Excel、PowerPoint等Microsoft Office应用的功能,例如创建、编辑或转换文档。 3. Jacob的核心是动态链接库(DLL),在Windows系统中运行,提供Java调用COM组件的接口。 ...

    jacob.jar的使用方法

    下面我们将详细介绍如何在Java项目中使用Jacob.jar进行COM组件的调用。 首先,我们需要了解`jacob.jar`和`dll`文件的作用。`jacob.jar`是Jacob的Java类库,包含Java接口和抽象类,它们映射到COM接口。而`dll`文件...

    JacobWord2010-03-31.rar

    标题“JacobWord2010-03-31.rar”和描述中提到的文件名表明,这是一个关于Microsoft Word 2010的教程或参考资料的压缩包,可能包含了由用户“Jacob”创建或整理的文件,日期为2010年3月31日。由于标签与标题相同,...

    jacob_1.9.rar java调用activex

    1. **java操作word(内部资料).doc**:这份文档可能详细介绍了如何使用Jacob库在Java程序中操作Word文件,涵盖了创建、打开、编辑、保存文档等常见功能,对于开发者来说是一份宝贵的参考资料。 2. **jacob使用入门....

    jacob.jar jacob.dll以及自己封装的java类,很好用

    而“使用JACOB进行Excel读写控制.txt”和“使用Jacob来处理Word文档.txt”这两份文档很可能是详细的使用教程,分别阐述了如何使用Jacob处理Excel表格和Word文档的操作步骤和注意事项。 “介绍.txt”文件可能是对...

    Java实现对word的操作及实现所需要的所有包.rar

    其中,“实现java对Word的操作.doc”可能是包含详细步骤的教程或代码示例文档,而“jacob_1.9.zip”则是用于Java与COM接口交互的Jacob库的压缩文件。 Jacob(Java和COM的桥梁)是一个开源项目,它允许Java程序调用...

    jacob_1.9

    开发者可以通过阅读JACOB的官方文档、在线教程和示例代码来学习如何使用这个库。实践是掌握这类技术的关键,通过编写小型示例程序,逐步熟悉如何操作COM组件。 总的来说,JACOB_1.9是Java开发人员用来在Java环境中...

    jacob-1.16-M1 官方最新版

    对于初学者,可以通过阅读Jacob的官方文档、在线教程以及相关的Stack Overflow问答来快速上手。同时,社区中有很多示例代码和实践经验分享,可以帮助解决实际开发中遇到的问题。 总结,Jacob-1.16-M1是Java开发者...

    jacob-1.18-M2的jar包、dll支持.zip

    这些文件是Jacob库运行的基础,它们使得Java开发者可以利用Java语言调用Windows系统中的COM组件,实现诸如Excel操作、Word文档处理等任务。 标签"jacob"明确了讨论的主题,这个标签通常用于标记与Jacob库相关的讨论...

    jacob-1.19.zip

    **Jacob-1.19.zip** 是一个包含Java与COM接口交互库的压缩包,主要目的是为了让Java程序能够调用...此外,查阅Jacob的官方文档、Stack Overflow等技术社区的问答以及在线教程,都能帮助你更好地理解和使用这个库。

    java操作word转PDF源文件

    Java操作word转PDF需要下载Jacob包.

    jacob常用方法

    通常,这样的博客文章会详细介绍如何使用Jacob,包括初始化、方法调用、错误处理等。建议读者访问该链接以获取更深入的理解。 **标签:“源码 工具”** “源码”标签表明我们可能讨论的是Jacob库的底层实现,以及...

Global site tag (gtag.js) - Google Analytics