Bonjour.
je m'exerce sur php (symfony) depuis quelques temps. je me situe plutôt du côté débutant !
Mais pour ne pas le rester trop longtemps, je fais une application sur la nutrition ( comme exercice ).
Pour résumer l'application: elle offre la possibilité pour une personne de savoir ce qu'il y a dans son assiette.
Elle pourra savoir combien de calories fait son plat composé de plusieurs aliments, sa quantité de protéines, lipides, glucides, vitamines, ...
Le tout sur un repas, un jour, une semaine, ...
J'ai donc besoin de savoir quelle est la composition nutritionnelle des aliments de base !
J'ai pour ça le site ciqual. Et ce site partage ses données... avec fichier excel.
J'aurais préféré une une BDD avec une API !
Je n'ai pas le choix, je vais devoir extraire ces données et les rentrer dans ma BDD.
Voici à quoi ressemble le fichier Excel:
Il y a exactement 67 constituants pour chaque aliment ( 67 colonnes) pour 3185 aliments !
Je ne veux pas tous les constituants de chaque aliments, seulement une trentaine! ( ça fait déjà moins de données...)
Pour extraire, j'ai entendu parler de la librairie PhpSpreadsheet
Avec ce code appelé dans mon index.php, je récupère les coordonnées des cellules d'une ligne ( A2, B2, C2, ...) sous forme de tableau.
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 <?php require __DIR__.'/vendor/autoload.php'; class MyReadFilter implements \PhpOffice\PhpSpreadsheet\Reader\IReadFilter { public function readCell($columnAddress, $row, $worksheetName = '') { if ($row >= 2 && $row < 3) { return true; } return false; } } function extraction() { $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xls'); $reader->setReadFilter( new MyReadFilter() ); $reader->setReadDataOnly(true); $spreadsheet = $reader->load("ciqual_2020.xls"); $worksheet = $spreadsheet->getActiveSheet(); $coordinates = $worksheet->getCellCollection()->getCoordinates(); return $coordinates; }
Je pourrai ensuite obtenir les valeurs des cellules (avec une boucle sur les coordonnées ) :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $cellValue = $worksheet->getCell($coordinate)->getValue()
En partant de là je crois avoir compris comment choisir des colonnes qui m'intéressent et je peux faire les 3185 aliments et mettre tout ça dans un tableau.
(un super tableau d'objets indexés)
Puis je bouclerai sur ce tableau pour remplir ma table en BDD...
D'où ma question: je m'y prends correctement ? Ou bien il y a une autre façon de faire ?
Merci pour vos réponses
Laurent.
Partager