2017-08-01 107 views
0

我使用这个简单的脚本输出从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并且脚本已经有效,所以我首先想知道是否有一种方法可以更改我的代码以执行招。

+0

如果您将文件保存为.txt扩展名? –

+0

它们正确存储在文件中,但您使用MS Excel查看它;和MS Excel对待数字和数字(总是失败,我知道),并且数字没有前导零....尝试用'='前缀以便MS Excel将它视为公式 –

+1

PS,你知道PHP有这个内置的函数,名为[fputcsv()](http://www.php.net/manual/en/function.fputcsv.php),它会干净地编写一个csv文件,它的丑陋代码会正确处理字符串内的引号 –

回答

0

根据问题的评论是不是在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

,你应该使用内置的CSV生成的PHP:

  1. http://php.net/manual/en/function.fputcsv.php
相关问题