Bonjour je dois faire un import de fichier excel dans une base de donnée. Je veux d'abord le convertir en csv pour l'importer ensuite.
J'ai trouvé un script PhpSpreadsheet (la nouvelle version de PHPExcel ) celui si marche mais pas avec un gros fichiers contenant des formules de calcul.
Il prend trop de temps à le traité. Voici le code de conversion
Après j'ai eu l'idée de desactiver les formules voici le codeCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 use PhpOffice\PhpSpreadsheet\IOFactory; $objReader = IOFactory::createReader('Xlsx'); $objPHPExcel = $objReader->load($file); $objWriter = IOFactory::createWriter($objPHPExcel, 'Csv'); $index = 0; foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) { $objPHPExcel->setActiveSheetIndex($index); if($worksheet->getTitle() == "Saisie Données Journalières"){ $temp = 'temp/'.str_replace(array("-"," "), "_", $worksheet->getTitle()) .".csv"; $objWriter->setSheetIndex($index); var_dump($temp); $objWriter->save($temp); } $index++; }
Avec ça c'est très rapide mais les données calculées sont remplacées par leurs formules. Si quelqu'un aurait une idée pour m'aider à accéléré le traitementCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 require 'vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\IOFactory; $file = 'DJENEBA.xlsx'; $objReader = IOFactory::createReader('Xlsx'); $objPHPExcel = $objReader->load($file); $writer = new \PhpOffice\PhpSpreadsheet\Writer\Csv($objPHPExcel); $writer->setPreCalculateFormulas(false); $index = 0; foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) { $objPHPExcel->setActiveSheetIndex($index); if($worksheet->getTitle() == "Saisie Données Journalières"){ $temp = 'temp/'.str_replace(array("-"," "), "_", $worksheet->getTitle()) .".csv"; $writer->setSheetIndex($index); $writer->save($temp); } $index++; }