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

  • Автор темы &rey
  • Дата начала
Статус
Закрыто для дальнейших ответов.
&

&rey

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

Передо мной встала такая вот проблема:
Хочу вызвать из 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? И вообще возможно ли всё

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

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

Azrael

#2
Возможно всё :blink: Не знаю, насколько поможет, вот код для подобных вещей в Lotus Notes... Подобные вещи можно и в делфи, я уверен (давненько нечто подобное делалось):
Код:
	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): ОК"
 
A

Astreyn

#3
Кто нибудь разобрался как запустить поиск решений с делфи????
Хоть как нибудь... пожалуйста помогите.
 
E
#4
Astreyn нет конечно, этож невозможно, видите и тут даже никто ничего не решил ...
 
Статус
Закрыто для дальнейших ответов.