2012-03-24 13 views
0

jacob 라이브러리를 사용하여 Excel 작업 중입니다. 기본 작업으로 Excel과 상호 작용하려고합니다. 코드 아래에서 실행 중이며 오류가 발생합니다. 어떻게해야합니까?JACOB 예제 실행 중 오류가 발생했습니다.

public class DispatchTest { 
    public static void main(String[] args) 
     { 

     ActiveXComponent xl = new ActiveXComponent("Excel.Application"); 
     Object xlo = xl.getObject(); 
     try { 
      System.out.println("version="+xl.getProperty("Version")); 
      System.out.println("version="+Dispatch.get(xlo, "Version")); 
      xl.setProperty("Visible", new Variant(true)); 
      Object workbooks = xl.getProperty("Workbooks").toDispatch(); 
      Object workbook = Dispatch.get(workbooks,"Add").toDispatch(); 
      Object sheet = Dispatch.get(workbook,"ActiveSheet").toDispatch(); 
      Object a1 = Dispatch.invoke(sheet, "Range", Dispatch.Get, 
             new Object[] {"A1"}, 
             new int[1]).toDispatch(); 
      Object a2 = Dispatch.invoke(sheet, "Range", Dispatch.Get, 
             new Object[] {"A2"}, 
             new int[1]).toDispatch(); 
      Dispatch.put(a1, "Value", "123.456"); 
      Dispatch.put(a2, "Formula", "=A1*2"); 
      System.out.println("a1 from excel:"+Dispatch.get(a1, "Value")); 
      System.out.println("a2 from excel:"+Dispatch.get(a2, "Value")); 
      Variant f = new Variant(false); 
      Dispatch.call(workbook, "Close", f); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      xl.invoke("Quit", new Variant[] {}); 
     } 
     } 
} 
+0

Windows 박스 또는 유닉스/리눅스 박스에서 실행하고 있습니까? – Cshah

답변

0

Exception in thread "main" java.lang.UnsatisfiedLinkError: com.jacob.com.Dispatch.createInstance(Ljava/lang/String;)V at com.jacob.com.Dispatch.createInstance(Native Method) at com.jacob.com.Dispatch.<init>(Dispatch.java) at com.jacob.activeX.ActiveXComponent.<init>(ActiveXComponent.java) at DispatchTest.main(DispatchTest.java:7)

나는 야곱의 LIB 버전 1.18를 사용하여이 방법 만 ExportAsPdfFormat

final String application = "Excel.Application"; 
      app = new ActiveXComponent(application); 
      final ActiveXComponent workbooks = app.getPropertyAsComponent("Workbooks"); 
      app.setProperty("visible", false); 
      app.setProperty("DisplayAlerts", false); 
      app.setProperty("AutomationSecurity", 3); 
      d = Dispatch.call(workbooks, "Open", this.getFileName(), ExcelConverter.UPDATELINKS, Variant.VT_FALSE, Variant.VT_MISSING, Variant.VT_MISSING, Variant.VT_MISSING, Variant.VT_TRUE).toDispatch(); 
      Dispatch.call(d, "ExportAsFixedFormat", ExcelConverter.XLTYPEPDF, this.getConvertedFileName(), ExcelConverter.XLQUALITYSTANDARD, Variant.VT_TRUE, Variant.VT_FALSE); 
0

메신저로 사용하고는 다른 어떤 전에 초기화해야합니다. 그것은 각각 다른 시스템 버전 "jacob - 1.18 - x64.dll"및 "jacob - 1.18 - x86.dll"에 대한 두 dll 파일이 함께 제공됩니다.

String libFile = System.getProperty("os.arch").equals("amd64") ? "/jacob-1.18-x64.dll" : "/jacob-1.18-x86.dll"; 

    /* Read DLL file*/ 

    InputStream inputStream = load_the_file_as_stream(); 
    /** 
    * Step 1: Create temporary file under <%user.home%>\AppData\Local\Temp\jacob.dll 
    * Step 2: Write contents of `inputStream` to that temporary file. 
    */ 
    File temporaryDll = File.createTempFile("jacob", ".dll"); 
    FileOutputStream outputStream = new FileOutputStream(temporaryDll); 
    byte[] array = new byte[8192]; 
    for (int i = inputStream.read(array); i != -1; i = inputStream.read(array)) { 
     outputStream.write(array, 0, i); 
    } 
    outputStream.close(); 

    System.setProperty(LibraryLoader.JACOB_DLL_PATH, temporaryDll.getAbsolutePath()); 
    LibraryLoader.loadJacobLibrary(); 

    /* Temporary file will be removed after terminating-closing-ending the application-program */ 
    temporaryDll.deleteOnExit(); 
관련 문제