fputcsv显示前导零

时间:2012-06-18 07:28:38

标签: php csv

我正在使用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 );

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

怎样才能在xls文件中显示前导零? 感谢

4 个答案:

答案 0 :(得分:14)

添加到DemoUser的方法:

\t方法对我有用,但稍有改动

$column_data = "\t000543";

添加\t解决了导致零点消失的问题,即使CSV正确且Excel“错误”,\t在excel中显示时保持前导零完好无损。

答案 1 :(得分:5)

您的数据已正确保存,Excel正在尝试变聪明。

使用Excel导入数据向导而不是直接打开文件(如果需要,将.csv文件重命名为.txt)。在导入向导上,选择列的数据类型为“text”而不是“general”:

Text import wizard step 3

答案 2 :(得分:4)

这么多年后,没有人提出一个可行的解决方案,这让我感到惊讶。

这对我有用:

$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'] . "\""]);
}

答案 3 :(得分:2)

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

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

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