какая функция для обновления формул в файле Excel? - PullRequest
0 голосов
/ 02 апреля 2020

с какой функцией обновлять формулы файла excel? если я изменю значение ячеек C2 и C3, формула ячейки C4, равная сумме C2: C3, не обновит то, что отсутствует в моем коде, чтобы вычисление было восстановлено? в моем исходном файле у меня есть много сложных формул, которые я хотел бы обновлять автоматически после изменения значения некоторых ячеек спасибо

?php
session_start();
header('Content-Type: text/html; charset=UTF-8'); /*obligatoire sur chaque page*/

//call the autoload
require 'PhpSpreadSheet/vendor/autoload.php';
//include the classes needed to create and write .xlsx file
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Reader\IReader;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;


//create directly an object instance of the IOFactory class, and load the xlsx file
$fxls ='excel-file_1.xlsx';
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($fxls);

//read excel data and store it into an array
$xls_data1 = $spreadsheet->getActiveSheet()->getCell('C2');
$xls_data2 = $spreadsheet->getActiveSheet()->getCell('C3');
$xls_data3 = $spreadsheet->getActiveSheet()->getCell('C4')->getCalculatedValue();
echo $xls_data1.' | '.$xls_data2.' | '.$xls_data3;
//result: 4000 | 15000 | 19000 => it's ok! C4=C2+C3

echo '<br/>';

$spreadsheet->getActiveSheet()->setCellValue('C2', '5000');
$spreadsheet->getActiveSheet()->setCellValue('C3', '17896');

$xls_data4 = $spreadsheet->getActiveSheet()->getCell('C2');
$xls_data5 = $spreadsheet->getActiveSheet()->getCell('C3');
$xls_data6 = $spreadsheet->getActiveSheet()->getCell('C4')->getCalculatedValue();
echo $xls_data4.' | '.$xls_data5.' | '.$xls_data6;
//result: 5000 | 17896 | 19000 => it's not good => not 19000 but 22896 (C4=C2+C3)

?>

1 Ответ

0 голосов
/ 02 апреля 2020

Я нашел подсказку, чтобы решить мою проблему, но возникает другая проблема: сохраненный файл не может быть изменен (только для чтения). знаете ли вы решение, чтобы сохраненный файл мог оставаться редактируемым? пожалуйста, спасибо

<?php
session_start();
header('Content-Type: text/html; charset=UTF-8');


require 'PhpSpreadSheet/vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Reader\IReader;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$fxls ='file.xls';
$spreadsheet = PhpOffice\PhpSpreadsheet\IOFactory::load($fxls);

$spreadsheet->getActiveSheet()->setCellValue('H4', '5'); $spreadsheet->getActiveSheet()->setCellValue('I4', '0');
$spreadsheet->getActiveSheet()->setCellValue('H5', '2'); $spreadsheet->getActiveSheet()->setCellValue('I5', '1');
$spreadsheet->getActiveSheet()->setCellValue('H6', '3'); $spreadsheet->getActiveSheet()->setCellValue('I6', '3');

$writer = PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, "Xlsx"); 
$writer->save($fxls); (file read only?)

$spreadsheet = PhpOffice\PhpSpreadsheet\IOFactory::load($fxls);    

//$xls_data4 = $spreadsheet->getActiveSheet()->getCell('C8');
//$xls_data5 = $spreadsheet->getActiveSheet()->getCell('Z8');
$xls_data1 = $spreadsheet->getActiveSheet()->getCell('V8')->getCalculatedValue();
$xls_data2 = $spreadsheet->getActiveSheet()->getCell('Z8')->getCalculatedValue();
echo $xls_data1.'<br/>';
echo $xls_data2.'<br/>';

?>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...