2 sibenben123asd sibenben123asd 于 2016.02.14 09:11 提问

如何使用poi调用并生成word

自己百度了很多内容,但是在eclipse中使用poi一直报错,无法实现使用poi调用并导出word的功能。

4个回答

caozhy
caozhy   Ds   Rxr 2016.02.14 09:39
已采纳

很明显是没有找到jacob,你的部署有问题

另外
String htmlfile = "D;/"; 这里D:不是分号

sibenben123asd
sibenben123asd 我把jacob-1.17-M2-x86.dll文件拷入jdk bin目录下面,然后我是64位系统的还需要把dll文件拷入系统目录/WINDOWS/system32目录下面吗
接近 2 年之前 回复
sibenben123asd
sibenben123asd 我是jdk1.7的使用jacob1.17.dll这个可以吗?
接近 2 年之前 回复
sibenben123asd
sibenben123asd 额,不好意思,一直没跑起来没发现这个问题。。。
接近 2 年之前 回复
caozhy
caozhy   Ds   Rxr 2016.02.14 09:15

贴出你的错误和代码。报错可能是简单的权限问题或者细节的问题。

sibenben123asd
sibenben123asd 我贴在下面了。麻烦看一下。运行最下面那段程序的时候就报错了,我按照网上的使用说明部署了jacob,但是还是报错,不知道是不是我部署的不对还是jar包不对。
接近 2 年之前 回复
sibenben123asd
sibenben123asd   2016.02.14 09:31
 package com.doc.test;
import java.util.Map;

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

import freemarker.template.Configuration;

public class XmlToWord {
    private Configuration configuration = null;
    public XmlToWord(){
        configuration = new Configuration();
        configuration.setDefaultEncoding("utf-8");
    }
    public void xmlToWord(String docfile, String htmlfile){
        ActiveXComponent app =null;
        try {
        app=new ActiveXComponent("Word.Application"); //启动word
        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 selection=app.getProperty("Selection").toDispatch();
        Dispatch find = Dispatch.call(selection,"Find").toDispatch();
        Dispatch.put(find,"Text","目录");
        Dispatch.put(find,"Forward","True");
        Dispatch.put(find,"Format","True");
        Dispatch.put(find,"MatchCase","True");
        Dispatch.put(find,"MatchWholeWord","True");
        Dispatch.call(find,"Execute").getBoolean();
        Dispatch ActiveDocument = app.getProperty("ActiveDocument").toDispatch();
        Dispatch TablesOfContents = Dispatch.get(ActiveDocument,"TablesOfContents").toDispatch();
        Dispatch.call(selection,"MoveRight"); //移动光标到右边
        Dispatch.call(selection, "TypeParagraph"); //换行
        Dispatch range = Dispatch.get(selection, "Range").toDispatch();
        Dispatch.call(TablesOfContents,"Add",range,new Variant(true),new Variant(1),new Variant(3),new Variant(true),new Variant(""),new Variant(true),new Variant(true));
        Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {
        htmlfile, new Variant(1) }, new int[1]);
        Variant f = new Variant(false);
        Dispatch.call(doc, "Close", f);
        } catch(Exception e){

        } 
        finally{
            if(app!=null)
            app.invoke("Quit", new Variant[] {});
        }
    }
}

package com.doc.test;

import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;

public class a {
    /**
     * @param args
     * @throws UnsupportedEncodingException 
     */
    public static void main(String[] args) throws UnsupportedEncodingException {

        Map<String, Object> dataMap = new HashMap<String, Object>();
        dataMap.put("command", "苏");
        XmlToWordTest  mdoc = new XmlToWordTest();
        XmlToWord adc = new XmlToWord();
        String docfile = "E:/outFile.doc";
        String htmlfile = "D;/";
        adc.xmlToWord(docfile,htmlfile);
        mdoc.createDoc(dataMap, "E:/outFile.doc");
        System.out.println(System.getProperty("java.library.path"));
    }



}

然后显示报错
图片说明

rui888
rui888   Ds   Rxr 2016.02.14 10:53

jacob system32
要 拷贝到system下面

rui888
rui888 回复sibenben123asd: 我用 这个jacob 没有问题的,你 system32和 system下面都拷贝看看测试看看。其次32 位 64位也看下 。
接近 2 年之前 回复
sibenben123asd
sibenben123asd 这个dll文件存在版本问题吗?我按照网上的教程都试了很多遍了,一直都在报这个错
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!