Не могу использовать Excel Solver из PHP, используя расширение COM

Я должен запустить Excel Solver (GRG нелинейный) из PHP. Я использую расширение COM.

Когда я запускаю простой макрос из Excel или PHP (который не содержит инструкций решателя), сохраненный в файле Excel .xlsm, все работает нормально — макрос вносит некоторые простые изменения в ячейки в файле Excel, а затем сохраняет его как новый файл xls.

Проблема начинается, когда макрос содержит решающие инструкции (ничего сложного). Если такой макрос запускается из Excel, все работает нормально, как и раньше — работает Солвер. Но когда я пытаюсь запустить этот точный макрос, используя PHP с COM, возникает ошибка, которая:

«EXCEL SOLVER — ОШИБКА В МОДЕЛИ. ПОЖАЛУЙСТА, УБЕДИТЕСЬ, ЧТО ВСЕ КЛЕТКИ И ОГРАНИЧЕНИЯ ДЕЙСТВИТЕЛЬНЫ».

Я пробовал это на нескольких разных простых примерах, каждый раз с одинаковым эффектом (макрос запускается в Excel без проблем, и при запуске макроса из PHP возникает ошибка).

Код PHP:

<?php
//Remember to add in php.ini thius line : extension=php_com_dotnet.dll
$excel = new COM("excel.application") or die("Unable to instanciate excel");     //starting excel
print "Loaded excel, version {$excel->Version}<br><br>";
$excel->Visible = 0;//NOT  //bring it to front
$excel->DisplayAlerts = 0; //dont want alerts ... run silent
$workBook = $excel->Workbooks->Open("Zeszyt1.xlsm"); //create a new  workbook
$sheet=$workBook->Worksheets("Arkusz1"); //select the default sheet
$sheet->activate;  //make it the active sheet

// run macro
$excel->Run("EqMacro");

$strPath = 'Zeszyt1_output1.xlsm'; // save the new file
$workBook->SaveAs($strPath);


$workBook->Close(false);  //close the book
$excel->Workbooks->Close();
unset($sheet);   //free up the RAM
$excel->Quit();  //closing excel
$excel = null;  //free the object
?>

Макро EqMacro:

Sub EqMacro()

SolverOk SetCell:="$H$9", MaxMinVal:=3, ValueOf:=0, ByChange:="$D$6:$D$7", _
Engine:=1, EngineDesc:="GRG Nonlinear"SolverAdd CellRef:="$H$6", Relation:=2, FormulaText:="0"SolverAdd CellRef:="$H$7", Relation:=2, FormulaText:="0"
SolverSolve
End Sub

Ссылка на JPG с простой задачей для решения в Excel:

https://ibb.co/ehcxBy

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]