【问题标题】:fputcsv display leading zerosfputcsv 显示前导零
【发布时间】:2012-06-18 07:28:38
【问题描述】:

我正在使用 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 文件中也显示前导零?

【问题讨论】:

  • 如何打开您的 XLS 文件?我的意思是 XLS 编辑器具有自动格式化功能,所以请确保不是您的编辑器删除了您的数据的0

标签: php csv


【解决方案1】:

添加到 DemoUser 的方法:

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

$column_data = "\t000543";

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

【讨论】:

  • 简单的解决方案拯救了我的一天。
  • @bhawani 使用单引号还是双引号?
【解决方案2】:

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

这对我有用:

$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】:

你的数据保存正确,是Excel在努力变聪明。

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

【讨论】:

  • 如果您正在导出最终用户在另一个导入过程中使用的 CSV 文件,我们需要发出警告。然后再次疏忽导致其他后果。我仍然希望找到一种方法来绕过这个强制的 Microsoft Excel 功能!
【解决方案4】:

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

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

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

【讨论】:

  • 我试过了,但总是同样的问题!
猜你喜欢
  • 2021-05-21
  • 2010-09-13
  • 1970-01-01
  • 2018-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多