我从数据库中获取值并将它们插入csv文件以下载并导入到Outlook中。
我正在使用此代码
// output headers so that the file is downloaded rather than displayed
$today = date("m.d.y");
header('Content-Type: text/csv;');
header('Content-Disposition: attachment; filename='.$today.'-allowners.csv');
// create a file pointer connected to the output stream
$output = fopen('php://output', 'w');
// output the column headings
fputcsv($output, array('firstname', 'lastname', 'email'));
// fetch the data
$rows = mysql_query('SELECT first_name, last_name, email FROM owners');
// loop over the rows, outputting them
while ($row = mysql_fetch_assoc($rows)) fputcsv($output, $row);
我得到了奇怪的结果,首先列标题没有分隔符,其次不是数据库中的所有字段都用'“'分隔。 输出如下:
firstname,lastname,email
" aaaaa"," bbbbb",0000
" aaaaa"," bbbbb"," 0000"
"aaaaa ",bbbbb,000@00000.com
aaaaa,bbbbb,000.00.0@00000.com
" aaaaa"," bbbbb"," 000.00000@00000.com"
" aaaaa"," bbbbb"," 000000@000000.com"
当尝试导入Outlook时,它会给我一个错误,指出该文件无效或正被另一个应用程序或进程使用。
---------------解---------------
问题是使用在Linux上运行的php创建的文件的换行结束在Windows系统中打开,这并不总是在某些软件中引起麻烦,但由于它是MS Outlook,它们看起来非常严格。我测试了用excel打开文件并保存为CSV覆盖现有文件,它没有问题。
解决方案可以在以下其他问题答案的网址中找到。
http://stackoverflow.com/a/12723639/2633609
答案 0 :(得分:0)
不添加机箱,因为它们不需要。所包含的所有值都具有相同的特征:它们具有前导空格。
请记住,CSV是一种定义非常糟糕的格式。几乎任何东西都可以是CSV。分隔符,附件和转义字符的定义不明确。
至于你得到的错误。也许Excel需要分号分隔文件?分离标签似乎也有时起作用。这取决于您的语言/区域设置。
答案 1 :(得分:0)
在示例输出中,您提供了没有任何格式问题:
给出的示例是有效的CSV输出,并与此处的文档一致:php.net/manual/en/function.fputcsv.php
最强烈的怀疑是文件未在脚本末尾用fclose正确关闭。