0

PHP の fputcsv 関数を使用して配列を CSV ファイルにエクスポートしようとしています。ただし、Excel 2007 と 2010 でファイルを開くと、まったく異なる 2 つの動作が発生します。

Excel 2007 では、すべてのフィールドが次のように個別の列にあるため、必要なものが得られます。

ああ | bbb | ccc | dddd

123 | 456 | 789

"ああ" | "bbb" |

しかし、Excel 2010 では、次のようにすべてのフィールドが同じ列にあります。

aaa,bbb,ccc,dddd
123,456,789
"aaa","""bbb"""

Excel 2007 と 2010 の両方で Excel 2007 の動作を取得するにはどうすればよいですか?

次のスクリプトを使用しました。

        $filename = "test.csv";
    //header("Content-Type: application/vnd.ms-excel;");
    header('Content-Type: text/csv');
    header('Content-Disposition: attachment; filename="' . $filename . '"');
    header("Pragma: no-cache");
    header("Expires: 0");
    $list = array (
        array('aaa', 'bbb', 'ccc', 'dddd'),
        array('123', '456', '789'),
        array('"aaa"', '"bbb"')
    );
    $fp = fopen("php://output", 'w');
    foreach ($list as $fields) {
        fputcsv($fp, $fields);
    }
    fclose($fp);

header("Content-Type: application/vnd.ms-excel;"); を使用してみました または header('Content-Type: text/csv'); しかし、私は同じ動作をします。:S

前もって感謝します。

編集: PHPExcel を使用することになりました。すてきな図書館です!!

4

2 に答える 2

1

これはPHPのせいではありません。CSVのインポートでゴミになるのはExcelのせいです。

ExcelのCSV処理にはいくつかのバグがあります(より正確には、CSVファイルのアイコンをダブルクリックしてExcelで開くとデフォルトのCSV処理になります)。

一般的な問題の1つは、UTF-8です。UTF-8でエンコードされたCSVファイルでExcelがチョークします。エンコーディングを確認してください。ファイルをUTF-8として保存する場合は、可能であれば標準のASCIIに切り替えてください。

説明されている問題を引き起こす可能性のある別の問題は、Excelに小数点記号としてコンマを使用するロケール設定がある場合です。これにより、フィールド値の一部としてコンマが表示されるため、ExcelがCSVファイルを読み取ることができなくなります。

ほとんどすべての問題は、ファイルのアイコンをダブルクリックするのではなく、Excel内からファイルを開くことで回避できます。この方法でCSVファイルを開くと、Excelがテキストインポートウィザードを案内します。このウィザードでは、Excelがファイルを正しく開くようにファイル形式を指定できます。理想的ではありませんが、一部のCSVファイルでは、かなり標準的であるように見えるファイルでも(PHPで作成されているかどうかに関係なく)、それが唯一のオプションです。

お役に立てば幸いです。

于 2013-03-07T11:57:47.843 に答える
1

Excelで区切り文字を変更する設定があり、それを「、」文字に設定すると機能します。

これを読んでください: http://office.microsoft.com/en-gb/excel-help/import-or-export-text-txt-or-csv-files-HP010099725.aspx#BMimport_data_from_a_text_file_by_openi

于 2013-03-07T11:26:25.197 に答える