0

私は一般的なアルゴリズムを使用して、理論上は主要な OS で機能する CSV ファイルを作成しています。しかし、クライアントは数週間前に Mac の使用を開始し、Microsoft Excel 2008 for Mac 12.2.1 で CSV ファイルを読み取ることができないと私に言い続けています。

「セミコロン;」を使用するようにOSが構成されています。これはまさに私がCSVに書いているものです。また、メモ帳でファイルを開くと、改行がなく、すべてが 1 行で表示されていることに気付きました。これが、Excel がファイルを正しく読み取れない理由です。しかし、私のコードでは、クロスブラウザーの改行を使用しています\r\n

これは私が使用する完全なコードです:

header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
// Output to browser with appropriate mime type, you choose ;)
header("Content-type: text/x-csv");
//header("Content-type: text/csv");
//header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=participantes.csv");

$separator = ";";
$rs = $sql->doquery("SELECT A QUERY TO RETRIEVE DATA FROM THE DB");

$header = "";
$num_fields = mysql_num_fields($rs);

for($i=0; $i<$num_fields; $i++){
  $field = mysql_field_name($rs, $i);
  $header .= $field.$separator;
}

echo $header."\r\n";

while($row = $sql->fetch($rs)){
  $str = "";
  for($i=0; $i<$num_fields; $i++){
    $field = mysql_field_name($rs, $i);
    $value = str_replace(";", ",", $row->{$field});
    $value = str_replace("\n", ",", $value);
    $value = str_replace("\d", ",", $value);
    $value = str_replace(chr(13), ",", $value);
    $str .= $value.$separator;
  }
  echo $str."\r\n";
}

Mac ユーザーがファイルを正しく読めるようにするためにできることはありますか?

4

3 に答える 3

1

デバッグ目的の場合:

  1. CSV ファイルを作成し、メールで送信します。彼らはそれを開くことができますか?
  2. あなたのページからファイルをダウンロードして、あなたに返送してもらいます。16 進エディタでファイルを比較して、ブラウザに送信したものや保存したものと見た目が異なる可能性を除外します。
  3. Excel の設定を再確認してもらいます。
  4. 動作する CSV ファイルを最初から作成し (Mac のテキスト エディター)、アプローチとの違いを見つけてもらいます。
于 2010-04-08T16:15:47.920 に答える
0

Mac の改行文字は LF (Unicode U+000A) で、Windows では CR + LF (Unicode U+000D の後に U+000A) です。

多分それが csv が Mac で読めない理由です。

于 2011-09-01T06:08:16.050 に答える
0

タブ区切りのデータを CSV に変換するために行ったコードを次に示します。Mac では問題なく動作します。ブラウザにプッシュするのではなく、クリックしてダウンロードできるように設定していることに注意してください。それは素晴らしい解決策ではありません(コードがくだらないと確信しています)が、必要なものには機能します。

$input = $_POST['input'];
//Remove commas.
$replacedinput1 = str_replace(",", "-", $input);
//remove tabs, replace with commas
$replacedinput2 = str_replace(" ", ",", $replacedinput1);
//create an array
$explodedinput = explode("
", $replacedinput2);
//open the CSV file to write to; delete other text in it
$opencsvfile = fopen("/var/www/main/tools/replace_tab.csv","w+");
//for each line in the array, write it to the file
foreach($explodedinput as $line) {
fputcsv ($opencsvfile, split(',', $line));
};
//close the file
fclose($opencsvfile);
//have the user download the file.
/*
header('Pragma: public');
header('Expires: Fri, 01 Jan 2010 00:00:00 GMT');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Type: application/csv');
header('Content-Disposition: filename=replace_tab.csv'); */

//Or not, since I can't get it to work.
echo "<a href='replace_tab.csv'>Download CSV File, then open in Numbers or Excel (Note, you may need to right click, save as.)</a>.";
于 2010-04-08T16:08:55.690 に答える