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

我想知道是否有可能控制Excel的插件,特别是从C#解决。

我已经得到了这么多:

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

我找不到任何文档,但是当在Microsoft的Visual Studiodebugging器中探索这个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函数编写一个包装,作为工作簿macros代码中的子例程。 接下来你会从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");