La librairie PHPSpreadSheet permet d'accéder à des documents ou classeurs en lecture et de créer des documents ou classeurs. Actuellement, cette librairie ne propose pas la fonctionnalité de modification d'un document ou classeur existant.
Cependant, il est possible d'ouvrir un classeur en lecture et créer un document ou classeur avec les données du classeur ouvert précédemment. Dans ce traitement, les données peuvent être modifiées et enregistrées dans un nouveau classeur.
L'exemple suivant propose d'ouvrir un classeur, de modifier et d'enregistrer les données dans un nouveau classeur.
Exemple saisie des éléments variables du salaire brut
Contrôle de la rémunération brute totale avec le montant minimum au 1er janvier 2024
Le script ci-dessus montre de manière basique une intéraction entre un formulaire de saisie web et un classeur qui s'ouvre
Cet exemple montre que
L'avantage de cette situation est une économie de ligne de code dans le script. La maintenance du script est également simplifiée. Un inconvénient est de devoir créer un
Un autre avantage est de pouvoir contrôler la saisie sur un classeur et d'éviter une altération des données volontaire ou involontaire par un utilisateur. Dans une session
, ce contrôle se fait avec des
Dans cet exemple, ce contrôle s'effectue avec un
Script PHP utilisé pour cet exemple
<?php
require_once 'vendor/autoload.php';
$reader = new \PhpOffice\PhpSpreadsheet\Writer\Ods();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// controle de saisie $boo1 = false // pas de saisie
$boo2 = true; // saisie invalide
if (is_numeric($_POST['frm_sal'])) {
// champ formulaire salaire $vnm_sal = $_POST['frm_sal'];
$boo1 = true;
} elseif (empty($_POST['frm_sal'])){
$vnm_sal = "";
} else {
echo "<p>Saisie erronée</p>";
$boo2 = false;
}
if (is_numeric($_POST['frm_avnat'])) {
// champs avantage nature $vnm_sal = $_POST['frm_avnat'];
$boo1 = true;
} elseif (empty($_POST['frm_avnat'])){
$vnm_sal = "";
} else {
echo "<p>Saisie erronée</p>";
$boo2 = false;
}
// gestion des autres champs identique if (...)...{...}...
// OUVERTURE EN MEMOIRE
if ($boo1){
// controle au moins 1 saisie, on continue $reader = new \PhpOffice\PhpSpreadsheet\Reader\Ods();
$filename = 'fichier_en_lecture.ods';
$spreadsheet = $reader->load($filename);
$sheet = $spreadsheet->getSheet(0);
// ECRITURE EN MEMOIRE
$sheet->setCellValue('B2', $frm_sal);
$sheet->setCellValue('B3', $frm_avnat);
...
$sheet->setCellValue('B...', $...);
// application d'un format affichage des nombres $sheet->getStyle('B:B')->getAlignment()->setHorizontal('right');
// à cette étape, on peut lire une valeur du classeur existant
// et par exemple passer cette valeur à javascript...
//on enregistre les données en mémoire dans un nouveau classeur $nouveauClasseur = 'classeur_en_ecriture.ods';
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Ods($spreadsheet);
$writer->save($nouveauClasseur);
} // boo1
else {
echo "<p style=color:crimson>Aucuns montants saisis</p>";
} // else boo1
} // SERVER['REQUEST_METHOD']
?>
Le script de cet exemple est une version basique pour afficher le contenu d'un classeur source
qui contient des calculs et se servir des données du classeur pour créer un nouveau classeur avec les calculs du classeur source.