12

我正在使用 PHP 脚本从结果集查询生成 excel CSV 文件。一切正常,但是当我阅读我的 excel 文件时,我无法显示前导零。

这是我的代码:

$rows = $this->Query($sql);

$filename = "/www/zendsvr/htdocs/Project/public/report.xls";
$realPath = realpath( $filename );

$filename = realpath( $filename );
$handle = fopen( $filename, "w" );
$finalData = array();

for( $i = 0; $i < count( $rows ); $i++ ) {
    $finalData[] = array( utf8_decode( $rows[$i]->CODE ) );
}

foreach ( $finalData AS $finalRow ) {
    fputcsv( $handle, $finalRow, "\t" );
}

fclose( $handle );

如果我创建一个var_dump()$finalData[]我会看到正确的值,例如“000198”、“000199”、“000200”,但我的 XLS 文件中的相同值是 198,199,200

如何在 XLS 文件中也显示前导零?

4

4 回答 4

25

要添加到 DemoUser 的方法:

\t方法对我有用,但略有变化

$column_data = "\t000543";

添加\t解决了我的前导零消失的问题,即使 CSV 是正确的并且 Excel 是“错误的”,\t在 excel 中显示时保持前导零完整的工作。

于 2016-02-16T19:15:19.717 回答
10

经过这么多年没有人提出可行的解决方案,我感到很惊讶。

这对我有用:

$records = [
    ['name' => 'John', 'phone' => '01234567'],
    ['name' => 'Jane', 'phone' => '01234569'],
];

$file = fopen('php://output', 'w');

fputcsv($file, ['Name', 'Phone N°']);

foreach ($records as $record) {
    fputcsv($file, [$record['name'], "=\"" . $record['phone'] . "\""]);
}
于 2020-02-29T15:14:54.273 回答
5

您的数据保存正确,是 Excel 试图变得聪明。

使用 Excel 导入数据向导而不是直接打开文件(如有必要,将 .csv 文件重命名为 .txt)。在导入向导中,将列的数据类型选择为“文本”而不​​是“常规”:

文本导入向导步骤 3

于 2012-06-18T07:46:50.810 回答
3

尝试将其转换为字符串,例如:

fputcsv($fp, (string) $val);

或者,打开 XLS 文件将截断前导 0,因此请尝试在零之前添加 /t 以避免在创建行值时截断 0。

于 2012-06-18T07:37:41.327 回答