在c#中从COM控制Excel添加(例如,求解器)

本文关键字:例如 添加 中从 COM 控制 Excel | 更新日期: 2023-09-27 18:18:37

我想知道是否有可能控制Excel的添加,特别是从c#求解器。

我已经说到这里了:

var Solver = Excel.Application.AddIns["Solver Add-in"];

我找不到任何文档,但是当在微软的Visual Studio调试器中探索这个COM对象时,它显示了一个指向"SOLVER"的名称参数。XLAM",我认为这意味着我在正确的轨道上。在这个COM对象中似乎没有任何有用的方法。

有没有人知道如何重写这个VBA代码在c#工作,例如?

SolverOk SetCell:="$G$39", MaxMinVal:=2, ValueOf:=0, ByChange:= _
    "$H$5:$H$17,$H$19:$H$22,$H$24:$H$32,$H$34:$H$37", Engine:=1, EngineDesc:= _
    "GRG Nonlinear"
SolverSolve

在c#中从COM控制Excel添加(例如,求解器)

您可以在VBA中为SolverOK函数编写包装器,作为工作簿宏代码中的子例程。接下来你可以从c#调用它。

下面是一个barebones VBA示例:

Sub SolverOkWrapper(setCell As String, maxMinVal As Double, valueOf As Double, byChange As String, engine As Integer, engineDesc As String)
    SolverOk setCell, maxMinVal, valueOf, byChange, engine, engineDesc
    SolverSolve True
End Sub

然后在c#中你可以这样做:

        Microsoft.Office.Interop.Excel.Application appExcel = new Microsoft.Office.Interop.Excel.Application();
        appExcel.Visible = true;
        //If you go with this route, use appExcel.AddIns["Solver Add-In"].Installed() to check if solver is installed before continue
        Microsoft.Office.Interop.Excel.Workbook workBook = appExcel.Workbooks.Open("C:''yourPathHere''yourWorkbookWithWrapperMacroHere.xlsm",
    Type.Missing, Type.Missing, Type.Missing, Type.Missing,
    Type.Missing, Type.Missing, Type.Missing, Type.Missing,
    Type.Missing, Type.Missing, Type.Missing, Type.Missing,
    Type.Missing, Type.Missing);
        appExcel.Run("SolverOkWrapper", "$A1$1", 1, 0, "$B$1", 1, "GRG Nonlinear");