2014-06-01 2 views
0

пытается запустить Excel с помощью Иакова, но он продолжает бросать исключение, искало какую-то время для одной из причин такого исключения, но ничего хорошегозапустить Excel с помощью ком интерфейса

package com.se.jaexcel; 

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

public class JExcel { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 

     ActiveXComponent xl = new ActiveXComponent("Excel.Application"); 

    } 
} 

исключения не

Exception in thread "main" com.jacob.com.ComFailException: Can't QI object for IDispatch 
    at com.jacob.com.Dispatch.createInstanceNative(Native Method) 
    at com.jacob.com.Dispatch.<init>(Dispatch.java:99) 
    at com.jacob.activeX.ActiveXComponent.<init>(ActiveXComponent.java:58) 
    at com.se.jaexcel.JExcel.main(JExcel.java:14) 

ответ

0

Вы не скачиваете файлы с нужной DLL. В приведенном ниже примере c: \ myapp \ lib содержит jacob-1.18-M2-x64.dll и jacob-1.18-M2-x86.dll. Если вы не хотите загружать их из статического местоположения, см. http://www.javaquery.com/2013/12/getting-started-with-jacob-example-with.html, чтобы узнать, как вы можете загружать DLL из ресурса.

private static void loadLibrary(final String appDir) throws IOException { 
     final String libFile = "amd64".equals(System.getProperty("os.arch")) ? 
        "/jacob-1.18-M2-x64.dll" : "/jacob-1.18-M2-x86.dll"; 
     System.setProperty(LibraryLoader.JACOB_DLL_PATH, 
          Paths.get(appDir, "lib", libFile).toString()); 
     LibraryLoader.loadJacobLibrary(); 
    } 


public static void main(String[] args) { 
     loadLibrary("c:\\myapp"); 
     ActiveXComponent xl = new ActiveXComponent("Excel.Application"); 

    }