繁体   English   中英

从PHP导出到EXCEL时如何在单元格中保留“零”?

[英]How to keep “zeros” in cells when exporting from PHP to 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并且脚本已经可以正常工作,因此我首先想知道是否可以通过某种方式更改代码来执行特技。

根据评论,问题不在CSV构造中,而是Excel的数据格式转换。 Excel自动将字段设置为数字,并且数字没有前导零。 根据Microsoft文档, https://support.office.com/zh-cn/article/Keeping-leading-zeros-and-large-numbers-1bf7b935-36e1-4985-842f-5dfa51f85fe7? ui = zh-CN & 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

这是一个严重的问题。 如果文本定界符不再使字段被视为文本,则说明出现了问题。 文本定界符的用途不应仅限于转义通用字段定界符。 我将ASCII代码160附加到任何文本字段。 其为法国财务数字集团的分隔符。 它看起来像一个空格,但不会被数据导入过程修剪。 这样,即使引号也没有用:无论如何,该字段都将被视为文本! 使用该末尾的char,即使值是000234,我也会得到文本单元格。我尝试过的任何其他解决方案都遗漏了一些东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM