我在使用PHP生成的CSV文件中有以下示例行。当我cat
文件时,这就是我所看到的:
541787,271561,"04/01/2013 09:26:35",18801872,Many,"PINSTRIPE JACKET",18806821872,75.00,GBP,1,0078,5051916991872
但是,当我在MS Excel中打开此文件时,“0078”已更改为“78” - 因此MS Excel已将其自行删除前导零。它还将EAN13编号(在L列中)转换为指数。
就PHP代码而言,我使用以下代码将文件输出到浏览器,该代码主要使用,但我想知道是否有办法控制使用PHP剥离前导零?< / p>
// set the headers
header('Content-Type: application/csv');
header('Content-Disposition: attachment; filename=_report_' . date('Y-m-d-His') . '.csv');
header('Pragma: no-cache');
echo $report->getCSVOutput();
exit;
答案 0 :(得分:1)
使用CSV格式,您无能为力。由于它不包含任何格式,因此Excel会分析每个值并尝试猜测它最有可能是什么。
所以 0078 变成 78 (因为Excel认为它是一个数字)而 5051916991872 变成 5.05192E + 12 因为这是表示长数字的默认方式。
如果这是一个严重的问题,您需要使用一种文件格式,您可以在其中指定值的类型。最简单的可能是 XML Spreadsheet 2003 。您可以通过按照您希望的方式格式化Excel电子表格来创建模板,然后将其另存为 XML Spreadsheet 2003 并在文本编辑器中打开它。
答案 1 :(得分:1)
事实证明,通过对SimpleExcel进行小调整(由所有者建议),此包可以处理前导零的剥离。
我正在使用以下代码:
/**
* get the order data in Microsoft Excel XML format (to be used when output to the browser directly)
* @return void
*/
public function getExcelXMLOutput() {
// instantiate new object (will automatically construct the parser & writer type as XML)
$excel = new SimpleExcel('xml');
// add some data to the writer
$excel->writer->setData($this->orders);
// save the file with specified name
// and specified target (default to browser)
$excel->writer->saveFile('report_' . date('Y-m-d-His'));
}
代码修正要求我将XMLWriter
方法中的addRow
类更改为:
$datatype = is_string($val) ? 'String' : (is_numeric($val) ? 'Number' : 'String');
答案 2 :(得分:0)
以单引号'
开头的列值将被视为Excel文本并保留前导零。
答案 3 :(得分:0)
使用日期时,以下内容似乎有效。
只需使用以下空格填充日期:
$csvVal = '" ' . $DateTime->format('m/d/y') . ' "';