Управление надстройками Excel (например, решатель) из COM в C #

1

Я хотел бы знать, можно ли управлять надстройками 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
  • 1
    Самый простой способ программирования Excel на C # - это использовать VSTO - Visual Studio Tools for Office, который поставляется вместе с Visual Studio. см .: msdn.microsoft.com/en-gb/office/hh133430.aspx
  • 0
    Благодарю. Это хороший ресурс, по некоторым причинам многие из этих страниц не отображаются в Google
Теги:
excel-vba
excel
com
solver

1 ответ

2

Вы можете написать оболочку для функции 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");
  • 0
    Спасибо! Это работает, и это довольно хороший обходной путь, но мне все еще интересно, есть ли способ получить прямой доступ к Солверу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню