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

Jacob 生成 Word

阅读更多

首先需要下载最新的jacob,不一定是帖子上说的1.14.1,接下来就是一下介绍了。缺点必须安装office

2008-4-27  Edited By DingDangXiaoMa
运用jacob 来与word 进行交互。
参考例子:http://www.99inf.net/SoftwareDev/Java/54344.htm
例 子做的不错,注释写的也很全。
配置说明:
http://www.danadler.com/jacob/
官方上下载 jacob的包。jacob-1.14.1
配置:
1。jacob-1.14.1-x86.dll  文件,加载进系统环境变量 path中。
2.jacob-1.14.1-x86.dll  文件拷到windows /system32中。
3.jacob-1.14.1-x86.dll  文件拷到jdk/bin中。
要不然会有找不到.dll文件的可能。程序就无法运行了。
下面的这个例子,表示了,把一些字符串写入到指定 的word中。程序可以运行于.java 文件。.jsp 还有servlet 环境下。

import  java.sql.Timestamp;
import  java.text.SimpleDateFormat;
import  java.util.ArrayList;
import  java.util.Date;
import  com.jacob.activeX.ActiveXComponent;
import  com.jacob.com.Dispatch;
import  com.jacob.com.Variant;
public   class  WordExtractor  ... {
    
//  创建一个组件。
     private  ActiveXComponent MsWordApp  =   null ;
    
//  建立两个dispath.
     private  Dispatch document  =   null ;
    
private  Dispatch selection  =   null ;
    
//  构造函数
     public  WordExtractor()  ... {
        
super ();
    }

    
/** */ /**
     * 开启word档案
     * 
@param  makeVisible
     * 显示或是不显示(true:显示;false:不显示)
     
*/

    
public   void  openWord( boolean  makeVisible)  ... {
        
try   ... {
            
//  打开word(如果word未开启时)
             if  (MsWordApp  ==   null ... {
                MsWordApp 
=   new  ActiveXComponent( " Word.Application " );
            }

            
//  设置word是可见或不可见(true:显 示;false:不显示)
            Dispatch.put(MsWordApp,  " Visible " new  Variant(makeVisible));
        }
  catch  (RuntimeException e)  ... {
            
//  TODO Auto-generated catch block
            e.printStackTrace();
        }

    }


    
/** */ /**
     * 建立word的文本内容
     * 
     
*/

    
public   void  createNewDocument()  ... {
        
//  建立一个Dispatch对象
        Dispatch documents  =  Dispatch.get(MsWordApp,  " Documents " ).toDispatch();
        document 
=  Dispatch.call(documents,  " Add " ).toDispatch();
    }


    
/** */ /**
     * 格式化时间字符串
     * 
@param  date_str
     *            原始时间字符串
     * 
@return  修改后的字符串
     
*/

    
public  String ReplaceDateStr(String date_str)  ... {
        String str 
=   "" ;
        String[] date_str_arr 
=  Tool.splitString(date_str,  " - " );
        
//  String[] date_str_arr =null;
         if  (date_str_arr.length  >   0 ... {
            str 
=  date_str_arr[ 0 +   " / "   +  date_str_arr[ 1 +   " / " +  date_str_arr[ 2 ];
        }
  else   ... {
            str 
=  date_str;
        }


        
return  str;
    }


    
/** */ /**
     * 写入资料到word中
     * 
@param  title
     *            本文标题
     * 
@param  textToInsertarr
     *            要写入的内容数组集合
     
*/

    
public   void  insertText(String title, ArrayList textToInsertarr)  ... {
        selection 
=  Dispatch.get(MsWordApp,  " Selection " ).toDispatch();  //  输入内容需要的对象

        Dispatch alignment 
=  Dispatch.get(selection,  " ParagraphFormat " )
                .toDispatch(); 
//  行列格式化需要的对象
        Dispatch font  =  Dispatch.get(selection,  " Font " ).toDispatch();  //  字型格式化需要的对象
        Dispatch font1  =  Dispatch.get(selection,  " Font " ).toDispatch();  //  字型格式化需要的对象
        
//  Dispatch image = Dispatch.get(selection,
        
//  "InLineShapes").toDispatch();  // 放入图片需要的对象
        
//  String mm =
        
//  "D:"+File.separator+"IRMAS_COMBINE"+File.separator+"images"+File.separator+"mis_login.jpg";
        
//   // 图片来源路径

        
//  格式化时间
        java.util.Date ddate  =   new  Date();
        SimpleDateFormat sdf2 
=   new  SimpleDateFormat( " dd-MM月-yy " ,
                java.util.Locale.TRADITIONAL_CHINESE); 
//  oracle要的时间格式
        Timestamp ts1  =   new  Timestamp(ddate.getTime());
        String date_str 
=  (ts1.toString()).substring( 0 10 );
        String result_str 
=  ReplaceDateStr(date_str);  //  格式化后的时间 2008/04/27
        
//  文件标题
        
//  Dispatch.call(selection, "TypeParagraph");  // 空一行段落
        Dispatch.put(alignment,  " Alignment " " 1 " );  //  (1:置中 2:靠右 3:靠左)
        Dispatch.put(font1,  " Bold " " 1 " );  //  字型租体
        Dispatch.put(font1,  " Color " " 1,0,0,0 " );  //  字型颜色(1,0,0,0=>红色
                                                    
//  1,1,0,0=>棕色)
        
//  Dispatch.put(font, "Italic", "1");  // 字型斜体
        Dispatch.call(selection,  " TypeText " , title);  //  写入标题内容

        
//  标题格行
        Dispatch.call(selection,  " TypeParagraph " );  //  空一行段落
        Dispatch.put(alignment,  " Alignment " " 3 " );  //  (1:置中 2:靠右 3:靠左)
        Dispatch.put(selection,  " Text " "          " );
        Dispatch.call(selection, 
" MoveDown " );  //  游标往下一行

        
//  插入图片
         /**/ /*
         * Dispatch.call(selection, "TypeParagraph"); Dispatch.put(alignment,
         * "Alignment", "2"); //(1:置中 2:靠右 3:靠 左) Dispatch.call(image,
         * "AddPicture", mm); //写入图片
         
*/


        
/**/ /* --------不输入到表格时------------
        //主要内容(即参数数组中的值)
        for(int i=0;i<textToInsertarr.size();i++)
        {
             String arr_tostr = textToInsertarr.get(i).toString();
             String arr_substr = arr_tostr.substring(1,arr_tostr.length()-1);    // 去掉前后'['和']'
             String[] arr_split = arr_substr.split(",");                         // 字符串数组(在分隔每个元素值)

             for(int j=0;j<arr_split.length;j++)
             {
                    //主要内容
                        Dispatch.call(selection, "TypeParagraph");
                    Dispatch.put(selection, "Text", arr_split[j]);               // 写入word的内容
                        Dispatch.put(font, "Bold", "0");                             // 字型租体(1:租体 0:取消租体)
                    //Dispatch.put(font, "Italic", "1");                         // 字型斜体(1:斜体 0:取消斜体)
                    //Dispatch.put(font, "Underline", "1");                      // 文字加底线(1:加底线 0:不加底线)
                    Dispatch.call(selection, "MoveDown");                        // 光标往下一行(才不会盖过上一输入的位置)
             }

             //每写入一次资料空一行,以区隔之用
                Dispatch.call(selection, "TypeParagraph");
             Dispatch.put(selection, "Text", "                   ");
             Dispatch.call(selection, "MoveDown");                               // 游标往下一行
        }
         
*/

        
//  依参数内的数组元素总个数计算要输入到表格的列数
         int  all_count  =   0 ;
        
for  ( int  p  =   0 ; p  <  textToInsertarr.size(); p ++ ... {
            String arr_tostr 
=  textToInsertarr.get(p).toString();  //  先将数组元素转成字符串
            String arr_substr  =  arr_tostr.substring( 1 , arr_tostr.length()  -   1 );  //  去掉前后'['和']'
            String[] arr_split  =  arr_substr.split( " , " );  //  字符串数组(在分隔每个元素值)
             int  num  =  arr_split.length;

            all_count 
+=  num;  //  累加个数
        }

        
//  建立表格
        Dispatch tables  =  Dispatch.get(document,  " Tables " ).toDispatch();
        Dispatch range 
=  Dispatch.get(selection,  " Range " ).toDispatch();
        Dispatch newTable 
=  Dispatch.call(tables,  " Add " , range,
                
new  Variant(all_count),  new  Variant( 1 ),  new  Variant( 1 ))
                .toDispatch(); 
//  设置列数,栏数,表格外框宽度
        Dispatch.call(selection,  " MoveRight " );  //  光标移到最右边
        putTxtToCell(font, alignment,  1 1 1 , textToInsertarr);  //  表格内写入内容(从第1列第1栏开始)
        
//  mergeCell(1,1,1,all_count,1);  // 表格合并(从第1列第1栏开始,第X列第1栏结束)
        
//  autoFitTable();  // 自动调整表格

        
int  count  =   0 //  计算合并表格后的列数递增(例如:前五列合并成一列,则往下继续合并时,要考虑加上合并后的那一列)
        
//  依数组笔数合并表格
         for  ( int  k  =   0 ; k  <  textToInsertarr.size(); k ++ ... {
            String arr_tostr 
=  textToInsertarr.get(k).toString();  //  先将数组元素转成字符串
            String arr_substr  =  arr_tostr.substring( 1 , arr_tostr.length()  -   1 );  //  去掉前后'['和']'
            String[] arr_split  =  arr_substr.split( " , " );  //  字符串数组(在分隔每个元素值)
             int  num  =  arr_split.length;

            
if  (k  ==   0 ... //  第一次合并时,num值不需加前一列
                mergeCell( 1 , k  +   1 1 , num,  1 );
                count
++ ;
            }
  else   ... //  第二次合并之后,num值要加前一列,以此 类推...
                mergeCell( 1 , k  +   1 1 , num  +  count,  1 );
                count
++ ;
            }

        }

        
//  取消选择(因为最后insert进去的文字会显示反白,所以要取消)
        Dispatch.call(selection,  " MoveRight " new  Variant( 1 ),  new  Variant( 1 ));

        
//  插入页首页尾
        
//  取得活动窗体对象
        Dispatch ActiveWindow  =  MsWordApp.getProperty( " ActiveWindow " )
                .toDispatch();
http://images.csdn.net/syntax
分享到:
评论

相关推荐

    jacob生成word目录

    本篇文章将深入探讨如何利用JACOB来自动生成Word文档的目录。 首先,我们需要了解什么是目录(TOC,Table of Contents)。在Word文档中,目录是一份列出文档主要部分及其对应页码的索引,帮助读者快速定位到他们感...

    FLASHBUILDER程序使用JACOB生成WORD文档

    标题中的“FLASHBUILDER程序使用JACOB生成WORD文档”涉及到的是使用Adobe Flash Builder这款集成开发环境(IDE)以及一个名为JACOB的Java库来创建Microsoft Word文档的过程。Flash Builder主要被用来开发Flex和...

    jacob通过word模板生成word文档

    java项目, 直接导入eclipse里面或者myeclipse里面就可以运行....通过jacob插件,通过word模板自动填充相应的数据,并且产生文件,为了解决有的tomcat下会乱码, 生成完成之后会转码一下, 解决了中文乱码问题.

    java 操作jacob 生成word,html或者excel

    jacob.jar: a JAR file for the java classes which you must add to your CLASSPATH. The package names replace com.ms with com.jacob (for example com.ms.com.Variant maps to com.jacob.com.Variant.  jacob...

    使用jacob通过word样表生成制式表格

    以下是一段示例代码,展示了如何使用jacob生成Word表格: ```java import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; public class WordTableGenerator { public static void main...

    jacob 模板动态生成word

    要使用jacob生成Word文档,首先你需要一个Word模板文件,这个模板包含了所有固定的格式、样式以及占位符,这些占位符将在运行时被动态替换。例如,你可以创建一个包含文字、表格和图片的模板文件,然后通过编程方式...

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

    Jacob提供了API来访问和修改Word的内置样式,这些样式用于生成目录。首先,你需要设置章节标题的样式,例如"标题1",然后在文档中使用这些样式标记你的章节标题。 ```java Dispatch.set(doc, "ActiveWindow", ...

    java使用jacob通过word模板生成word文档项目实例

    Java使用Jacob库通过Word模板生成Word文档是一种常见的技术实践,特别是在需要自定义生成大量结构化报告的场景下。本项目实例提供了一个完整的解决方案,可以直接在MyEclipse环境中运行。下面将详细讲解这个项目的...

    通过freemarker和jacob生成合同word文档html生成word文档2种方式

    通过freemarker和jacob生成合同word文档html生成word文档(word模板类型的资源)压缩包里有有详细的生成方式,里面有两种生成方式,一种是用html生成。另一种则是后台生成 1、第一步通过office软件将word文档命名好...

    Jacob根据模版动态生成word文档

    这个资源提供了一个基于Jacob的示例工程,用于演示如何动态地根据模板生成Word文档。下面我们将深入探讨Jacob库的使用,以及如何在Java项目中实现这个功能。 首先,Jacob(Java COM Bridge)是一个开源的Java库,它...

    java使用jacob通过模板生成word文档完整项目

    Java使用Jacob库通过模板生成Word文档是一个常见的技术实践,尤其在企业级应用中,这种技术常用于批量生成报告、合同等文档。Jacob全称为Java Advanced COM Bridge,它为Java提供了与COM组件交互的能力,让我们可以...

    jacob 导出word 整理

    总结来说,Jacob提供了一种强大的方式,使得Java开发者能够利用已有的Word功能,无需了解复杂的COM接口细节,即可实现Word文档的生成和导出。尽管存在一定的局限性,但只要应用场景合适,Jacob不失为一个实用的工具...

    word如何自动生成目录

    ### Word 自动生成目录详解 在日常办公或学术写作中,Word 的自动目录功能为撰写者提供了极大的便利。通过本文,我们将详细介绍如何在 Word 中利用大纲级别来自动生成目录。 #### 一、利用大纲级别自动生成目录 *...

    jacob操作word文件

    总的来说,Jacob提供了一种在Java中自动化处理Word文档的方法,适用于批量处理、数据导入导出、文档生成等场景。通过深入理解和运用Jacob库,开发者可以实现对Word文档的灵活控制和定制化处理。

    利用jacob实现替换word文本和图片

    利用jacob实现替换word文本和图片,需要导入响应jar包和dll.

    SSM+freemaker+jacob实现生成word文档并转换为PDF 另一个是错的

    错误可能出现在生成Word文档、使用Jacob操作Word,或者转换为PDF的任一阶段。可能的原因包括但不限于: 1. FreeMarker模板语法错误:模板中的表达式或控制结构可能有误。 2. 数据绑定问题:Java代码未能正确地将...

    jacob生成带有图片的word

    在提供的压缩包`Java-Jacob生成带有图片的word文档`中,应包含了一个完整的示例项目,包括所需的jar包和可能的图片文件。你可以参照这个示例来构建自己的项目,确保所有的库文件和依赖项都已正确配置。在实际开发中...

    使用jacob将word转换为html的完整代码

    下面我们将详细讨论如何使用jacob库将Word文档转换为HTML。 首先,你需要在项目中引入jacob库。通常,这涉及到下载jacob.jar文件并将其添加到项目的类路径中。如果是MyEclipse这样的集成开发环境(IDE),你可以在...

    jacob以目录和段落分析读取Word文档(自己写的)

    在这个场景下,我们将详细探讨如何利用Jacob来分析和处理Word文档,特别是目录、段落以及它们之间的关系。 首先,标题和目录在Word文档中起着组织和导航的作用。Jacob提供了API,可以让我们访问到Word文档的内置...

Global site tag (gtag.js) - Google Analytics