在PHP中使用truncate 0 in values问题创建CSV脚本

时间:2018-03-21 16:32:50

标签: php csv scripting fputcsv

我已经使用了这个脚本,但在写入1523时使用了CSV中的一些01523值。

$file = fopen('demosaved.csv', 'w');

// save the column headers
fputcsv($file, array('Column 1', 'Column 2', 'Column 3', 'Column 4', 'Column 5'));

// Sample data. This can be fetched from mysql too
$data = array(
array(01523, 'Data 12', 'Data 13', 'Data 14', 'Data 15')
);

// save each row of the data
foreach ($data as $row)
{
fputcsv($file, $row);
}

// Close the file
fclose($file);

1523 等csv输出中,我想 01523

enter image description here

我不想在值中使用'/n', '/t''01523'。 另外如何在双引号中设置所有标题和值?比如“第1栏”,“第2栏”......

2 个答案:

答案 0 :(得分:1)

运行脚本后(假设数组中的01523实际上是字符串"01523"), demosaved.csv 的内容将是:

"Column 1","Column 2","Column 3","Column 4","Column 5"
01523,"Data 12","Data 13","Data 14","Data 15"

如果您在文本编辑器中打开它,您将看到前导零,因为它位于文件中。如果你在Excel中打开它,你就不会看到前导零,,即使它在文件中,因为这就是Excel如何显示带有前导零的数字。

即使您在文本编辑器中编辑了demosaved.csv文件,并在数字前面加上前导零的引号,所以"01523","Data 12"...代替01523,"Data 12",...,Excel仍然不会显示前导零。强制Excel在CSV文件中显示数字前导零的唯一方法是使用您想要避免的其中一个技巧。

如果要在Excel中打开输出文件的预期用途,则可以创建Excel文档而不是CSV文件。这是PhpSpreadsheet的一个简单示例:

<?php
require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->fromArray($data, null, 'A1');
$writer = new Xlsx($spreadsheet);
$writer->save('example.xlsx');

前导零将显示在 example.xlsx 中。但是,此文件格式不能用于将数据传递给需要CSV的其他应用程序。如果这是您的输出文件的预期用途,那么您已经这样做了。

但是,如果您在Excel中打开CSV,编辑(或不编辑),并保存更改,则前导零将消失。

答案 1 :(得分:0)

不要在Excel中打开它。它总是从数字字段中删除前导零,除非你另有说明。如果你在文本编辑器中打开它并且零存在,那么PHP正在正确地完成工作,你需要去Excel论坛寻求帮助。

如果您坚持使用Excel,答案是更改格式。