Cellules excel export

Benjos_2106 Messages postés 18 Date d'inscription dimanche 29 janvier 2023 Statut Membre Dernière intervention 6 février 2024 - 6 févr. 2024 à 18:07
jordane45 Messages postés 38149 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 avril 2024 - 7 févr. 2024 à 21:39

Bonjour,

Je réalise un export de ma base de données vers excel tout ça en PHP.

Le problème que je rencontre est que les champs sont tous dans la même colonne A1 (voir screen ci-dessous)

Je veux que chaque champs sois dans sa cellules (voir screen ci dessous)

Voici mon code d’exportation en PHP:

<?php

require_once($_SERVER['DOCUMENT_ROOT'] . '/src/config.php');
require_once($_SERVER['DOCUMENT_ROOT'] . '/src/functions/functions.php');
require_once($_SERVER['DOCUMENT_ROOT'] . '/src/database/database.php');

function filterData(&$str) {
    $str = preg_replace("/\t/", "\\t", $str);
    $str = preg_replace("/\r?\n/", "\\n", $str);
    if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"';
}

// filename for download
$filename = "export_data-" . date('Ymd') . ".csv";

//Columns name
$fields = array('ID', 'N° Ordre', 'Date', 'Nom', 'Prénoms', 'Adresse', 'Code Postal', 'Ville', 'Adresse mail', 'Montant', 'Methode', 'Banque', 'N° de chèque', 'Mode d\'envoie', "Date d'impression", 'Date de sauvegarde');

$excelData = implode(",", array_values($fields)) . "\n";

$query = $pdo->query("SELECT * FROM informations ORDER BY id DESC");

if ($query->rowCount() > 0) {
    while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
        $rowData = array(
            $row['id'],
            $row['ordre'],
            $row['date'],
            $row['nom'],
            $row['prenom'],
            $row['adresse'],
            $row['codepostal'],
            $row['ville'],
            $row['adressemail'],
            $row['montant'],
            $row['methode'],
            $row['banque'],
            $row['ncheque'],
            $row['modeenvoie'],
            $row['dateimpression'],
            $row['datesauvegarde']
        );

        // Échapper les caractères spéciaux dans chaque valeur
        array_walk($rowData, 'filterData');

        // Ajouter les données échappées à la chaîne Excel
        $excelData .= implode(",", array_values($rowData)) . "\n";
    }
} else {
    $excelData .= 'No records found...' . "\n";
}

// Headers for download
header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Type: text/csv; charset=utf-8");

// Output the BOM (Byte Order Mark) to ensure Excel correctly interprets UTF-8
echo "\xEF\xBB\xBF";

// Output the Excel data
echo mb_convert_encoding($excelData, 'UTF-8', 'UTF-8');

// Exit to prevent further output
exit();
?>

Merci d'avance !

1 réponse

jordane45 Messages postés 38149 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 avril 2024 4 651
7 févr. 2024 à 21:39

Bonjour,

En aucun cas tu ne fais un export "excel" ....  mais un export CSV

Dans ton cas, tu as utilisé la virgule comme séparateur.

Tu peux éventuellement la remplacer par un point-virgule si tu veux que ton excel l'ouvre directement en séparant les colonnes...

Sinon, dans excel, tu peux regarder comment fonctionne le menu données/convertir ...

Et enfin, tu peux sinon modifier ton code pour créer un vrai fichier excel en utilisant la librairie phpspredsheet par exemple.


0