Как сохранить "нули" в ячейках при экспорте из PHP в EXCEL?

Я использую этот простой скрипт для экспорта из PHP в файл EXCEL:

<?php 
header('Content-Type: text/csv;');
header('Content-Disposition: attachment; filename="TDO-2017-'. $_GET['lieu'].'.csv');

require('../scripts/lib.php');
?>
"NOM";"PRENOM";"E-MAIL";"TELEPHONE";"ADRESSE";"CODE POSTAL";"VILLE"
<?php
echo "\n";
$rq = mysqli_query($connexion, 'SELECT * FROM tui_inscription WHERE lieu = "'. $_GET['lieu'] .'" AND valid = 1');
while($d = mysqli_fetch_assoc($rq)) {
    echo '"' . $d['nom'] . '";"' . $d['prenom'] . '";"' . $d['email'] . '";"' . str_replace("+33","0", $d['telephone']) . '";"' . $d['adresse'] . '";"' . $d['cpostal'] . '";"' . $d['ville'] . '"'."\n";
}
?>

Он отлично справляется со своей задачей, единственная проблема - исчезает начальный ноль в телефонных номерах. Я видел много объяснений о том, как использовать другие библиотеки для определения типа ячейки, но так как я не знаю PDO и сценарий уже работает, я сначала хотел узнать, есть ли способ изменить свой код, чтобы сделать трюк.

3 ответа

Решение

Согласно комментарию, проблема не в конструкции CSV, а в преобразовании форматирования данных в Excel. Excel автоматически устанавливает в поле число, а числа не имеют начальных нулей. Согласно документу Microsoft, https://support.office.com/en-us/article/Keeping-leading-zeros-and-large-numbers-1bf7b935-36e1-4985-842f-5dfa51f85fe7?ui=en-US&rs=en-US&ad=US, вы можете получить столбец к тексту, добавив к нему цитату.

Вы можете ввести апостроф (') перед числом, и Excel будет воспринимать его как текст.

Так:

echo '"' . $d['nom'] . '";"' . $d['prenom'] . '";"' . $d['email'] . '";"\'' . str_replace("+33","0", $d['telephone']) . '";"' . $d['adresse'] . '";"' . $d['cpostal'] . '";"' . $d['ville'] . '"'."\n";

должен работать на вас.

Кроме того, вы должны параметризовать свой запрос, чтобы не подвергаться SQL-инъекциям:

  1. http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

и вы должны использовать PHP встроенный генератор CSV:

  1. http://php.net/manual/en/function.fputcsv.php

Хорошо Добавление простого &nbsp; в таблице <td> может преобразовать число в текст.

Это серьезная проблема. Если текстовый разделитель больше не делает поле считающимся текстом, значит, что-то идет не так. Назначение разделителя текста не должно быть ограничено выходом за пределы общего поля. Я добавляю код ASCII 160 к любому текстовому полю. Своя французская финансовая группа номера spacer. Он выглядит как пробел, но не урезан процессом импорта данных. При этом даже кавычки бесполезны: поле все равно будет считаться текстом! С этим конечным символом я получаю текстовые ячейки, даже если значение равно 000234. Любое другое решение, которое я пробовал, что-то пропустило.

Другие вопросы по тегам