Cellules excel export

Benjos_2106 Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   -  
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   -

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 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 

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