zoukankan      html  css  js  c++  java
  • 【jacob word】使用jacob,合并多个word为一个word文件

    转载自:https://www.cnblogs.com/sxdcgaq8080/p/5659680.html

    将几个word文件合并到一个word文件,使用注意点:

    1.后面附项目运用的jar包jacob-1.9,其他版本的也可以(jacob-1.7等)

    2.并且jacob运用中,需要将附件内的jacob.dll(要根据你的系统是选择使用,跟jacob的版本暂时测试没有影响,例如jacob.jar使用1.9的jacob.dll使用1.7的也是可以的)放到windows/system32下

    语法介绍:

    将一个关于JACOB的代码分成下面几个步骤:

        1) ActiveXComponent ax = new ActiveXComponent("a1");//构建ActiveX组件实例

        其中的a1的值和你需要调用的ActiveX控件有关

    MS控件名

    a1的值

    InternetExplorer

    InternetExplorer.Application

    Excel

    Excel.Application

    Word

    Word.Application

    Powerpoint

    Powerpoint.Application

    vb/java Script

    ScriptControl

    windows media Player

    WMPlayer.OCX

    Outlook

    Outlook.Application

    Visio

    Visio.Application

    DAO

    DAO.PrivateDBEngine.35

    MultiFace

    MultiFace.Face

        2) Dispatch ds = ax.getObject(). toDispatch();//获取Dispatch对象,我们可以把每个Dispatch对象看成是对Activex控件的一个操作,这一步是获得该ActiveX控件的控制权。

        (注:浅析JACOB 中提到过Variant类,这里的ax.getObject()便是获得该对象,我们将其转化为任何对象(类型))

        3) Dispatch ds1 = Dispatch.get(ds, "a2").toDispatch(); //获取该ActiveX对象数据结构中的a2属性

        4) Dispatch d2 = Dispatch.invoke(ds1, "a3", a4, a5, a6).toDispatch(); //功能调用,对ActiveX对象ds1的a3属性执行a4(Dispatch.PutDispatch.Get等)操作,执行后a3的值为a5,a6为错误参数码常定义为new int[1],(注:call、get和put方法都是通过该方法实现的)

        5) Dispatch ds2 = Dispatch.put(ds, "a7","a8").toDispatch();//将ActiveX对象ds的属性a7的值设置为a8,该方法返回类型同get一样

        6) Dispatch ds3 = Dispatch.call(ds1, "a9", a10);//该方法和get方法非常类似,他是把a9属性赋值给a10

    具体的使用例子【将多个word合并成一个word文档】:

    1》首先将架包jacob-1.9放在lib,build path进项目

    2》将jacob.dll放在C:WindowsSystem32下

    package aaatest;

    import java.util.ArrayList;
    import java.util.List;

    import com.jacob.activeX.ActiveXComponent;
    import com.jacob.com.Dispatch;
    import com.jacob.com.Variant;

    public class WordTest {

    public static void main(String[] args) {
    List list = new ArrayList();
    String file1= "D:\2.doc";
    String file2= "D:\1.doc";
    //String file3= "D:\2.docx";
    list.add(file1);
    list.add(file2);
    //list.add(file3);
    uniteDoc(list,"d:\file.doc");
    }
    public static void uniteDoc(List fileList, String savepaths) {
    if (fileList.size() == 0 || fileList == null) {
    return;
    }
    //打开word
    ActiveXComponent app = new ActiveXComponent("Word.Application");//启动word
    try {

    // 设置word不可见 ---也就是设置ActiveXComponent对象的一个属性
    app.setProperty("Visible", new Variant(false));
    //获得documents对象----Variant。toDispatch()
    Object docs = app.getProperty("Documents").toDispatch();
    //打开第一个文件
    //功能调用,对ActiveX对象docs的"Open"属性执行Dispatch.Method(Dispatch.PutDispatch.Get等)操作,执行后"Open"的值为参数4,参数5为错误参数码常定义为new int[1],(注:call、get和put方法都是通过该方法实现的)
    Object doc = Dispatch
    .invoke(
    (Dispatch) docs, //调用目标
    "Open",
    Dispatch.Method,
    new Object[] { (String) fileList.get(0),new Variant(false), new Variant(true) }, //参数4
    new int[3]).toDispatch();//参数5
    //追加文件
    //和上面一样,不过换种通俗的解释:参数1就是这个invoke方法的主题操作对象,参数2就是要对参数1执行的方法的名字,参数3就是参数2这个方法的具体操作;参数4就是一系列的参数;参数5为错误参数码常定义为new int[1]
    for (int i = 1; i < fileList.size(); i++) {
    Dispatch.invoke(
    app.getProperty("Selection").toDispatch(),//参数1
    "insertFile", //参数2
    Dispatch.Method, //参数3
    new Object[] {(String) fileList.get(i), "",new Variant(false), new Variant(false),new Variant(false) },//参数4
    new int[3]);//参数5
    }
    //保存新的word文件
    Dispatch.invoke(
    (Dispatch) doc,
    "SaveAs",
    Dispatch.Method,
    new Object[] { savepaths, new Variant(1) },
    new int[3]);
    Variant f = new Variant(false);
    Dispatch.call((Dispatch) doc, "Close", f);//该方法和get方法非常类似,他是把"Close"属性赋值给f
    } catch (Exception e) {
    throw new RuntimeException("合并word文件出错.原因:" + e);
    } finally {
    app.invoke("Quit", new Variant[] {});
    }
    }
    }

  • 相关阅读:
    C# DataGridView的初始化
    DataGridView固定了列名,怎样将数据内容绑定在列上
    struts2 中的 addActionError 、addFieldError、addActionMessage方法的区别添加错误信息
    <s:iterator>标签迭代数据不显示
    org.hibernate.hql.ast.QuerySyntaxException: tb_voteoption is not mapped [from tb_voteoption where voteID=?]
    struts2导入多个xml引入报错<include>
    没有找到<context:component-scan base-package="">标签
    hibernate.hbm.xml配置文件解析
    Struts2 中#、@、%和$符号的用途
    Some projects cannot be imported because they already exist in the workspace
  • 原文地址:https://www.cnblogs.com/ysgcs/p/9149301.html
Copyright © 2011-2022 走看看