Вызов Поиска решения Excel из Delphi

Тема в разделе "Delphi - СОМ", создана пользователем &rey, 29 апр 2006.

Статус темы:
Закрыта.
  1. &rey

    &rey Гость

    Здравствуйте.

    Передо мной встала такая вот проблема:
    Хочу вызвать из Delphi Поиск решения в Excel. Для этого написал макрос, запускающий поиск решения, и

    сохранил в шаблоне книги Excel.
    Из Delphi запускаю Excel:
    XLApp:=CreateOleObject('Excel.Application');
    Открываю шаблон:
    Workbook:=XLApp.Workbooks.Add('c:\TP\solver1.xlt');
    Передаю необходимые данные в Excel и пытаюсь запустить макрос:
    OLEVariant(XLApp).Run('Module1.runsolver');

    Как только дело доходит до выполнения макроса, появляется сообщение об ошибке:
    "Поиск решения: непредвиденная внутренняя ошибка или достигнут предел памяти".

    Далее: Сохранаяем книгу. Закрываем. Открываем вручную. Запускаем макрос. Всё работает.

    Вопрос: Возможна ли работа из Delphi c Solver'ом Excel через OLEAutomation? И вообще возможно ли всё

    это в принципе? И если возможно, то как?

    Спасибо за внимание. Буду рад любым комментариям.
     
  2. Azrael

    Azrael Гость

    Возможно всё :blink: Не знаю, насколько поможет, вот код для подобных вещей в Lotus Notes... Подобные вещи можно и в делфи, я уверен (давненько нечто подобное делалось):
    Код (Text):
        Print "Поиск решения (в MS Excel): настройка поиска решения..."

    ' надстройка "Поиск решения"
    Set SolverAddIn=ms.AddIns("Поиск решения")

    ' книга Solver.xla
    Set wb=ms.Workbooks.Open(SolverAddIn.FullName)
    Call ms.Run("Solver.xla!Auto_Open")

    ' Задание целевой ячейки и изменяемых ячеек
    Call ms.Run("Solver.xla!SolverOk", sheet.Cells(numRowTotals,2), 2, 0, sheet.Range(sheet.Cells(numRowK,2),sheet.Cells(numRowK+Ubound(arr)-1,2)) )

    ' Задание ограничений
    ' ограничения на кол-во комплектов: целое, неотрицательное число
    Call ms.Run("Solver.xla!SolverAdd", sheet.Range(sheet.Cells(numRowK,2),sheet.Cells(numRowK+Ubound(arr)-1,2)),4,"целое" )
    Call ms.Run("Solver.xla!SolverAdd", sheet.Range(sheet.Cells(numRowK,2),sheet.Cells(numRowK+Ubound(arr)-1,2)),3,"0" )
    ' ограничение: итоговое кол-во деталей >= требуемое кол-во деталей
    For i%=1 To kolD
    Call ms.Run("Solver.xla!SolverAdd", sheet.Cells(numRowTotals,i%+2),3,"R" & Cstr(numRowNeed) & "C" & Cstr(i%+2) )
    Next i%

    ms.Visible=True

    ' Запуск поиска решения (с сохранением найденного решения)
    Call ms.Run("Solver.xla!SolverSolve")

    Print "Поиск решения (в MS Excel): ОК"
     
  3. Astreyn

    Astreyn Гость

    Кто нибудь разобрался как запустить поиск решений с делфи????
    Хоть как нибудь... пожалуйста помогите.
     
  4. etc

    etc Гость

    Astreyn нет конечно, этож невозможно, видите и тут даже никто ничего не решил ...
     
Загрузка...
Похожие Темы - Вызов Поиска решения
  1. k85
    Ответов:
    0
    Просмотров:
    360
  2. alexas1
    Ответов:
    0
    Просмотров:
    507
  3. Sanchezz86
    Ответов:
    1
    Просмотров:
    589
  4. vln1981
    Ответов:
    0
    Просмотров:
    711
  5. JohnLemon
    Ответов:
    3
    Просмотров:
    876
Статус темы:
Закрыта.

Поделиться этой страницей