【发布时间】:2015-09-03 09:58:07
【问题描述】:
在尝试生成 CSV 时,我想在多列中分离数据,但是我只看到 A1、A2、A3 列中的数据,而不是 b 或 C 中的数据。
有什么办法可以解决这个问题?
我想将姓名 X 、年龄 X 和城市 X 放在三个单独的列中
这是一些示例代码:
header("Content-Type: text/csv");
header("Content-Disposition: attachment; filename=file.csv");
// Disable caching
header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP 1.1
header("Pragma: no-cache"); // HTTP 1.0
header("Expires: 0"); // Proxies
function outputCSV($data) {
$output = fopen($_SERVER['DOCUMENT_ROOT']."/Project_X/trunk/output/test.csv", 'w');
foreach ($data as $row) {
fputcsv($output, $row); // here you can change delimiter/enclosure
}
fclose($output);
}
outputCSV(array(
array("name 1", "age 1", "city 1"),
array("name 2", "age 2", "city 2"),
array("name 3", "age 3", "city 3")
));
编辑:测试功能:
$output = fopen($_SERVER['DOCUMENT_ROOT']."/Project_X/trunk/output/test.csv", 'w');
fputcsv($output, array("hallo;123;4"),";"); // here you can change delimiter/enclosure
fclose($output);
输出为文件:“hallo;123;4”而不是 hallo;123;4
解决了这个问题:
$array = array("hallo;123;4");
$array = str_replace('"', '', $array);
fputcsv($output, $array);
【问题讨论】:
-
您如何查看生成的文件?您意识到 MS Excel 在读取 csv 文件时使用特定于区域设置的分隔符,因此有时您可能需要使用
;,有时可能需要使用,,具体取决于用于查看的 MS Excel 版本的区域设置您生成的文件 -
解决这个问题的一个方法是“告诉”MS Excel 正在使用什么分隔符;将文件的第一行设为
sep=,.... 但如果导入脚本正在其他地方使用该文件,这将不是一件好事 -
感谢 cmets在语言环境设置上,但是它的写作“test;1;2;3”而不是 test;1;2;3(不带引号)?我重新编辑了帖子并添加了一个测试功能。
-
fputcsv($output, array("hallo",123,4),";");在您的测试中,而不是fputcsv($output, array("hallo;123;4"),";");...。array("hallo;123;4")正在创建一个只有一个字符串元素的数组,因此它只会将其写为单元格 A1 的单个元素