2017-08-01 103 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
相關問題