Java - Jacob Multitheading

时间:2017-08-29 14:36:47

标签: java multithreading jacob

在我的网站上,有一个功能可以打开机器上的Excel文件并通过雅各布库(jacob-1.14.3)来处理它。

每次从新线程调用此代码:

//In a new thread everytime
ActiveXComponent excelApp = null;
try {
    info("Openning Excel application..", 1);

    ComThread.InitSTA();
    //ComThread.InitMTA();  
    //ComThread.InitSTA(true);
    //ComThread.InitMTA(true);

    excelApp = new ActiveXComponent("Excel.Application");
    excelApp.setProperty("DisplayAlerts", false);
    excelApp.setProperty("Visible", false);


    [...]

catch (Exception e) {
    throw e;
} finally {
    if (excelApp != null) {
        info("Closing Excel app..", 1);
        excelApp.invoke("Quit");
        ComThread.Release();
        System.gc();
    }
}

只要有超过1个线程处理Excel,我就会收到此错误:

  

com.jacob.com.ComFailException:无法将名称映射到dispid:XXX

XXX代表我正在寻找的任何属性(名称,工作簿,退出等)。运行1个单线程时不会出现错误。

在互联网上花了好几个小时后,我只有一份我不理解的文件:http://danadler.com/jacob/JacobThreading.html

我已经尝试过ComThread.InitSTA / MTA功能,但似乎没有解决问题。

如何让多个Excel实例与我的应用程序从不同的线程进行通信?

0 个答案:

没有答案