C# 从C中的COM控制Excel加载项(例如解算器)#

C# 从C中的COM控制Excel加载项(例如解算器)#,c#,excel,com,solver,vba,C#,Excel,Com,Solver,Vba,我想知道是否可以控制Excel的加载项,特别是C#中的解算器 我已经走了这么远: var Solver = Excel.Application.AddIns["Solver Add-in"]; 我找不到任何文档,但当在Microsoft的Visual Studio调试器中探索此COM对象时,它显示了一个名称参数,该参数引用“SOLVER.XLAM”,我认为这意味着我走对了方向。不过,此COM对象中似乎没有任何有用的方法 例如,有人知道如何重写VBA代码以在C语言中工作吗 SolverOk Se

我想知道是否可以控制Excel的加载项,特别是C#中的解算器

我已经走了这么远:

var Solver = Excel.Application.AddIns["Solver Add-in"];
我找不到任何文档,但当在Microsoft的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

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

以下是裸骨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");

在C#中编写Excel最简单的方法是使用VisualStudio附带的VSTO-VisualStudioToolsforOffice。看:谢谢。这是一个很好的资源,因为某些原因,很多页面没有出现在谷歌上。谢谢!这很有效,是一个很好的解决方法,但我仍然想知道是否有一种直接访问Solver的方法。