1

データベースから値を取得し、ダウンロードして Outlook にインポートする csv ファイルに情報を挿入しています。

私はこのコードを使用しています

// 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として保存して既存のファイルを上書きすることをテストしましたが、問題なく動作しました。

解決策は、他の質問への回答の次の URL にあります。

http://stackoverflow.com/a/12723639/2633609
4

2 に答える 2

0

あなたが提供した出力例では、フォーマットの問題はありません。

  • 囲み(二重引用符)が不要なフィールドには二重引用符がありません
  • エンクロージャーが必要なフィールドには、エンクロージャーがあります
  • すべての行のすべてのフィールドに必要な区切り文字 (カンマ) があります

与えられた例は有効な CSV 出力であり、次のドキュメントに沿っています: php.net/manual/en/function.fputcsv.php

最も疑わしいのは、スクリプトの最後にある fclose でファイルが適切に閉じられていないことです。

于 2013-12-05T13:14:05.550 に答える
0

エンクロージャーは必要ないため、追加されません。囲まれているすべての値は同じ特性を共有しています: 先頭にスペースがあります。

CSV は定義が不十分な形式であることに注意してください。ほとんど何でも CSV にできます。区切り文字、囲み文字、およびエスケープ文字が明確に定義されていません。

あなたが得ているエラーについて。たぶん、Excel はセミコロンで区切られたファイルを望んでいますか? タブ区切りも時々動作するようです。これは、言語/地域の設定によって異なります。

于 2013-12-05T13:09:44.663 に答える