使用JACOB从java调用Excel的Solver

时间:2014-03-20 22:54:15

标签: excel solver jacob

使用Jacob时,是否可以使用Solver加载项来优化java代码?

我发现了这个,但我不知道如何使用这个javascript示例并使用Jacob代替http://bytes.com/topic/javascript/answers/693863-using-excel-solver-web-page-using-javascript

1 个答案:

答案 0 :(得分:0)

如果您可以在Excel中将其记录为宏,我认为您将能够使用JACOB来调用它。我打开了录音机并得到了它,所以它似乎是可记录的(虽然我不知道有关该解算器的任何具体信息。)

Sub Macro1()
    Application.Left = 94
    Application.Top = 668.5
    AddIns("Solver Add-in").Installed = True
    SolverOk SetCell:="$A$1", MaxMinVal:=1, ValueOf:=0, ByChange:="$A$1", Engine:=1 _
        , EngineDesc:="GRG Nonlinear"
    SolverOk SetCell:="$A$1", MaxMinVal:=1, ValueOf:=0, ByChange:="$A$1", Engine:=1 _
        , EngineDesc:="GRG Nonlinear"
    SolverSolve
End Sub

我怀疑SolverOk和SolverSolve将成为" Run"调用Excel对象模型操作,如下所示(我的QuickRDA项目的TableReader.java的第340行);这些行在Excel中调用特定的宏。

public String GetQuickTab ( int row1, int row2, int col1, int col2, int vis ) {
    Variant v = Dispatch.call ( Application.xa, 0x103 /* "Run" */, "QuickRDA.JavaCallBacks.GetQuickTab", this, row1, row2, col1, col2, vis );
    if ( v == null || v.isNull () )
        return null;
    return v.getString ();
}

字符串" QuickRDA.JavaCallBacks.GetQuickTab"告诉Run方法要调用哪个宏:QuickRDA指定我的加载项的VBA项目名称,JavaCallBacks是该项目中的模块名称,GetQuickTab是该模块中的函数名称。 (Application.xa是JACOB ActiveX对象引用。)

如果您需要查看如何使用JACOB导航Excel对象模型的示例,请查看我的一些开源代码。 JEB是一个Java to Excel Bridge,它依赖于JACOB并提供特定于Excel对象模型的访问层。 https://github.com/erikeidt/JEB。我的一些其他项目使用JEB(例如QuickRDA),你可以在那里看到一些通过JEB访问Excel的例子。