Ecriture d’un classeur libreoffice calc – exemple

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-dessous montre de manière basique une intéraction entre un formulaire de saisie web et un classeur qui s’ouvre en local sur une application de tableur graphique (libre office, open office ou excel).

Cet exemple montre que le classeur en sortie contient tous les calculs pour cette saisie et que donc le script ne contient aucuns calculs.

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 formulaire web qui contient les champs de saisie avec les contrôles qui vont avec. Dans cet exemple, le formulaire est entièrement géré avec du html (et une feuille de style).

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 « cloud », ce contrôle se fait avec des permissions.

Dans cet exemple, ce contrôle s’effectue avec un formulaire qui copie les données saisie dans un nouveau classeur sans modifier le classeur source. Le script ci-dessous montre une gestion possible de cet exemple avec les principales étapes.
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.