`
ningwuyu
  • 浏览: 48938 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

jacob如何操作word

    博客分类:
  • java
阅读更多
首先,大家先要了解一下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 文件。

Java代码
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();  
    }  

分享到:
评论

相关推荐

    jacob操作word文件

    在给定的代码片段中,`GetWord` 类提供了使用Jacob操作Word文档的一些基本功能。 首先,`GetWord` 类初始化了一个`ActiveXComponent` 对象 `word`,这是Jacob库中的一个关键类,用于实例化COM对象,这里是Microsoft...

    jacob 操作word 文档详解

    Jacob 操作 Word 文档详解 Jacob 操作 Word 文档概述 Jacob 是一个 Java 库,用于访问和操作 Microsoft Office 应用程序,包括 Word。它提供了一个基于 COM(Component Object Model)的接口,允许 Java 应用...

    jacob操作word实例

    jacob操作word实例,包括文本、表格的读写操作

    jacob操作word(超详细)

    1、把jacob.dll文件,复制到 windows\system32 目录下。(注:我用的时候这个方法不能运行) 2、 把jacob.dll放入 Java\jdk1.5.0_06\jre\bin目录下.把jacob.jar放入 Java\jdk1.5.0_0\jre\lib\ext 目录下.可以正常...

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

    在这个“Jacob操作word文档的方法集”中,我们将探讨如何使用Jacob 1.5版本来创建和操作Word文档,特别是创建目录。 首先,为了使用Jacob,你需要在你的项目中添加Jacob的jar文件。这通常涉及到将库添加到项目的类...

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

    在使用Jacob操作Word时,你需要做以下几步: 1. **安装和配置Jacob**:首先,你需要下载Jacob的jar文件,例如`jacob.jar`,并将其添加到你的Java项目类路径中。同时,还需要将Jacob的动态链接库(DLL),通常是`...

    jacob操作word文档

    下面将详细阐述Jacob操作Word文档的核心知识点。 1. **Jacob简介** Jacob全称为Java-COM Bridge,是一个开源项目,它的主要作用是提供了一个桥梁,使得Java应用程序能够调用COM组件,进而与Windows系统上的Office...

    jacob操作word小结

    ### 使用Jacob操作Word知识点总结 #### 一、Jacob简介与Word自动化操作背景 Jacob(Java COM Bridge)是一款开源的Java库,它允许Java程序通过COM接口调用Windows平台下的应用程序,如Microsoft Office套件中的...

    一次jacob操作word的总结

    然而,需要注意的是,在服务器环境下使用Jacob操作Word存在一些潜在问题。由于Jacob依赖于本地的Office安装,所以这种方法可能不适用于没有安装Office的服务器,或者可能会受到服务器性能和并发限制的影响。此外,长...

    java通过jacob操作word,原码

    Java通过Jacob库操作Word是Java开发中一种常见的技术,用于在程序中自动化处理...如果你需要进一步了解如何使用Jacob操作Word,可以研究提供的`QuiltyCheckReport`压缩包文件中的源代码,以获取更具体的实现细节。

    jacob操作word

    jacob操作word

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

    在这个“Jacob操作Word完整代码实例”中,我们将深入探讨如何使用Jacob来实现对Word文档的各种操作。 首先,为了使用Jacob,你需要在你的项目中添加Jacob的jar文件。这个库通常可以从其官方网站或者其他开源仓库...

    用jacob操作word书签

    ### 使用Jacob操作Word书签的知识点 #### 一、Jacob简介 Jacob(Java COM Bridge)是一种用于在Java中调用COM对象的库。它提供了一种简单有效的方式,使得Java程序能够与Windows平台上的COM组件进行交互。对于需要...

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

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

    JACOB操作word和excel示例

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

    jacob操作word 轻松解决

    非常实用哦,对于入门者更是只剩的法宝哦。还在等什么,快下载吧。

    JACOB Java操作word 优秀

    java操作word 超简单实用:第一步: 引入包jacob.jar 第二步:参考工具类MsWordTool.java 含概基本WORD 所有操作方法 【特别难点】解决实例: 1)word书签内容替换后,书签会丢失问题 2)word定点批量插入图片...

    jacob 操作word实现demo

    在本示例的"jacob操作word实现demo"中,我们的目标是扫描简历信息并提取出所有名称。这可能涉及到对Word文档的逐行遍历,查找符合特定模式(如人名)的文本。以下是一个基本的步骤概述: 1. **加载COM组件**:首先...

Global site tag (gtag.js) - Google Analytics