Я хотел бы знать, можно ли управлять надстройками Excel, в частности, решать с С#.
Я получил это далеко:
var Solver = Excel.Application.AddIns["Solver Add-in"];
Я не могу найти документацию, но при изучении этого COM-объекта в отладчике Microsoft Visual Studio он показывает параметр имени, относящийся к "SOLVER.XLAM", который, как я полагаю, означает, что я нахожусь на правильном пути. Однако в этом COM-объекте нет никаких полезных методов.
Кто-нибудь знает, как переписать этот код VBA для работы на С#, например?
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
Вы можете написать оболочку для функции SolverOK в VBA, как подпрограмму в вашем макрокоманде рабочей книги. Затем вы назовете это из С#.
Вот пример 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
Затем в С# вы можете сделать что-то вроде этого:
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");