【问题标题】:Create CSV script in truncate 0 in values issue in PHP在 PHP 中的值问题中以截断 0 创建 CSV 脚本
【发布时间】:2018-03-21 16:32:49
【问题描述】:

我使用了这个脚本,但在 CSV 中写入了 1523 中的一些 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

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

【问题讨论】:

  • 用引号括起来/将其转换为字符串。另外,01523 是 php 中的八进制数,所以我很惊讶你得到 1523。
  • 如果它没有用引号括起来 - 值将不是 01523。
  • 如果它用引号括起来,你在你的CSV中得到01523。只是 Excel 去掉了前导零。在文本编辑器中查看。
  • 是的。当我第一次在文本编辑器中打开时显示 0 但当我签入 excel 0 时不显示。
  • 一些有趣的信息:stackoverflow.com/questions/2489553/…

标签: php csv scripting fputcsv


【解决方案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,对其进行编辑(或不编辑)并保存更改,则前导零将消失。

【讨论】:

  • 感谢您的出色回答,但仅需要 CSV 文件中的应用程序。
  • 那么,就像我说的,他们的做法很好。 CSV 文件中的前导零存在。您只是无法在 Excel 中看到它。
  • 你是对的,但发生了什么客户不明白,他只是打开 CSV 文件并检查。他想要 csv 中的 0。
  • 我想你只需要事先向他们解释一下。据我所知,没有办法强制 Excel 自动显示前导零而不向值添加其他内容,这可能会影响其在使用 CSV 的应用程序中的有用性。
  • 如果您在 Libre Office 中打开它,则在打开的对话框窗口中有一个选项可以将该列视为文本。如果您不能按照 Don't Panic 的建议进行操作,这可能是一种选择。
【解决方案2】:

不要在 Excel 中打开它。除非您另有说明,否则它总是会从数字字段中删除前导零。如果您在文本编辑器中打开它并显示零,那么 PHP 正在正确地完成这项工作,您需要到 Excel 论坛寻求帮助。

如果你坚持使用 Excel,答案是改变格式。

【讨论】:

  • 你是对的,但我的问题是 - 在像 1523 这样的 CSV 输出中,我想要 01523。
  • '01523' 是一个字符串。因为数字 01523 和 1523 完全一样。
  • @Pete 实际上,因为数字 01523 是 851。
  • 某些系统在导入 csv 时检查 5 位 Pincode ex-09523 时不一样,所以在输入 csv 后转换为 4 位。
  • 系统需要5位数字。当我们生成时间来获取 csv 4 位值时。想想我的观点。
猜你喜欢
  • 2019-03-09
  • 2016-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多