使用fputcsv php在csv上添加标题

时间:2017-08-03 15:51:13

标签: php csv fputcsv

我试图将一些数据输入到csv文件中并且效果很好,但如果我尝试添加数据表的标题,Excel就不会让我打开文件,因为&# 34; file.csv的文件格式和扩展名不匹配。该文件可能已损坏或不安全"。

以下是代码:

split.ModuleMarks <- split(ModuleMarks, ModuleMarks$Module)
desired <- Reduce("full_join", map(split.ModuleMarks, ~ as.data.frame(matrix(table(.x$JudgmentChar), nrow=1, byrow=T)) %>% setNames(names(table(.x$JudgmentChar)))))
rownames(desired) <- names(split.ModuleMarks)

编辑:

以下是我用记事本打开的csv的第一行:

ID;名称;价;数量

2;&#34;衬衫 - 颜色:白色,尺码:M&#34 ;;演示_2; 6

3;&#34;印花连衣裙 - 颜色:橙色,尺码:S&#34 ;;演示_3; 4

3 个答案:

答案 0 :(得分:1)

尝试将标题更改为:

$headers[] = '"ID"';
$headers[] = '"Name"';
$headers[] = '"Ref"';
$headers[] = '"Quantity"';

这会将字符串换成双引号,这样可以解决您遇到的语法问题。

答案 1 :(得分:1)

如果您打算使用此文件创建可以使用Excel正常打开的CSV文件,则标题不应该用双引号括起来(因为它们不包含任何内容)分隔符,你应该使用逗号而不是分号作为分隔符。但是,如果您进行了这些更改,当您尝试使用Excel打开生成的文件时,您仍然会收到相同的错误消息。令人惊讶的是,这是because your headers start with 'ID'

如果您可以为第一个列标题使用不同的名称,则可以简化一些事情。

$headers = ["ItemID", "Name", "Ref", "Quantity"];

$csvName = "file.csv";
$fileHandle = fopen($csvName, 'w') or die('Can\'t create .csv file, try again later.');

//Add the headers
fputcsv($fileHandle, $headers);

//Add the data
foreach ($info as $item) {
    fputcsv($fileHandle, $item);
}

//close file
fclose($fileHandle);

这应创建一个.csv文件,该文件将在Excel中打开,没有错误。

答案 2 :(得分:0)

Excel很挑剔。 PHP默认使用逗号,这实际上是您要用于Excel的。分号通常可以使用,但不是默认值 - 请记住,CSV代表逗号分隔值。第二个问题是Excel特有的。即使它在数据部分处理没有引号的字符串,但由于某种原因它在标题行上不能很好地工作。我没有在fputcsv中看到强制引号的选项,因此您需要对它们进行硬编码。类似的东西:

// create and open file  
$csvName = "file.csv";
$fileHandle = fopen($csvName, 'w') or die("Can't create .csv file, try again later.");

//Add the headers - note that \r\n or \n is OS dependent
fwrite($fileHandle,'"ID","Name","Ref","Quantity"' . "\r\n");

//Add the data
for ($i = 0; $i < count($info); ++$i) {
    fputcsv($fileHandle,$info[$i]);
}

//close file
fclose($fileHandle);