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

Code : 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
 
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++;
    }
Après j'ai eu l'idée de desactiver les formules voici le code

Code : 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
 
    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++;
    }
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 traitement