Как использовать функцию linest в phpspreadsheet? - PullRequest
0 голосов
/ 09 июня 2019

Я использую 33_Chart_create_scatter.php для создания диаграммы рассеяния XY.Я подхожу к завершению.Все, что у меня осталось, это вызвать функцию linest.Кто-нибудь может предоставить какой-нибудь код об использовании linest в phpspreadsheet?

Я сделал много гуглов, но не повезло.Много посещений документов phpspreadsheet.С большим количеством информации я не понимаю.Я до сих пор не использовал классы, поэтому я не знаю, как сформировать код для общения с классами, показанными в разделе кода ниже?Вот данные, которые я использую: $ xAxisTickValues ​​= [new DataSeriesValues ​​(DataSeriesValues ​​:: DATASERIES_TYPE_NUMBER, 'Worksheet! $ C $ 1: $ C $ 18', null, 18), новые DataSeriesValues ​​(DataSeriesValues ​​:: DATASERIES_TYPE_N $ $, $ $: $ F $ 18 ', null, 18) [][1];

\PhpOffice\PhpSpreadsheet\Calculation\Statistical::LINEST


    'LINEST' => [
        'category' => Category::CATEGORY_STATISTICAL,
        'functionCall' => [Statistical::class, 'LINEST'],
        'argumentCount' => '1-4',
    ],

открытая статическая функция LINEST ($ yValues, $ xValues ​​= null, $ const = true, $ stats = false) {$ const= ($ const === ноль)?true: (bool) Функции :: flattenSingleValue ($ const);$ stats = ($ stats === null)?false: (bool) Функции :: flattenSingleValue ($ stats);if ($ xValues ​​=== null) {$ xValues ​​= range (1, count (Functions :: flattenArray ($ yValues)));}

Конечно, у меня пока нет результатов.Я ожидаю, что вернусь самая полученная статистика.

Никто ничего не добавил за неделю.Вот что я выполнил за эту неделю: я получил следующие два массива данных, выполнив формулу wizzard / linest для данных в 33 диаграммах разброса создания.График, который я сделал.Итак, я знаю, какие данные я хочу получить из phpspreadsheet / linest.

Six foot data array
0.798178535 18.35040936
0.012101577 0.241020964
0.996335545 0.53274435
4350.269442 16
1234.67843  4.541064671

Ten foot data array
0.819287926 16.98988304
0.007826008 0.15586663
0.998542214 0.344522174
10959.54502 16
1300.848983 1.899128449

setCellValue, puts the formula in cell A32 and  cell A32 displays the first number from the Six foot data array above.

$helper->log, gives the following output. The getCell gives the linest     formula in the cell.
getCalculatedValue gives the Last value in the Six foot data array above.

    19:12:47 Write Xlsx format to 33_Chart_create_scatter.xlsx in 0.0138  seconds
    19:12:47 Value of linest six foot from getCell(A32) : =LINEST(D1:D18 ,    C1:C18 , TRUE, TRUE)
    19:12:47 Value of linest six foot used getCalculatedValue get cell A32 : 4.5410646714826
    19:12:47 Value of linest ten foot from getCell(A42) : =LINEST(G1:G18 ,  F1:F18 , TRUE, TRUE)
   19:12:47 Value of linest ten foot used getCalculatedValue get cell A42 : 1.8991284485724

Я пытался

   $spreadsheet->getActiveSheet()->fromArray($linestSix ,null,'C32'); 

То же самое, что и setCellValue, описанный выше.Перейдите по этой ссылке, введите описание ссылки здесь , чтобы увидеть выходные данные браузера, когда я запускаю свой код для создания своей диаграммы, 33 Chart create scatter.Пройдите примерно на 75 строк в объект до [Worksheet! A32]. Мои данные есть, но как мне их получить?Я получил это из print_r $ linest6 ниже.

<code>    $linest6 = $spreadsheet->getActiveSheet()->setCellValue('A32',     '=LINEST(D1:D18 , C1:C18 , TRUE, TRUE)');

   echo 'The six foot data array : <br>';
   echo '<pre>';
   print_r($linest6);
   echo '
';

Может ли кто-нибудь, может быть Марк Бейкер, помочь мне получить статистику из linest, такую ​​же, как я описал выше из формулы Wizzard?Спасибо.

1 Ответ

0 голосов
/ 02 июля 2019

Я наконец получил это !!Много поездок в гугл.Рассмотрим, как извлечь массив из функции класса.Вот мой последний сценарий.

    $stats = new Statistical();
$statArr6 = $stats->LINEST($dataArraySixY, $dataArraySixX, TRUE, TRUE);
$statArr10 = $stats->LINEST($dataArrayTenY, $dataArrayTenX, TRUE, TRUE);


$worksheet->fromArray(
    $statArr6, 
    NULL, 
    "C22");
$worksheet->fromArray(
$statArr10,
NULL,
'C32'
);

У меня есть немного больше, чтобы отобразить информацию, как я хочу, но у меня есть массивы.

...