• ベストアンサー

CSVをダウンロードさせた際、CSV側(EXCEL側)の書式が数値になってしまう

環境:Apache2&PHP5&MySQL5&Excel2003 SQLからCSVをダウンロードさせた際、CSV側(EXCEL側)の書式が、 「数値」で設定され、化けてしまいます。 例:1E+18、1E+18、1E+18 MySQL側ではVARCHAR(50)で、はいっているデータはすべて数字です。 (例:01000000002) CSVをEXCELで開き、セルの書式設定で「数値」に変えてやると 上記例(例:01000000002)の頭の0がなくなります。 ご経験のある方、参考サイト等教えていただけると幸いです。 ご参考までに、下記がソースです。 (5行目のconnection.phpでDBに接続しコードはSJISにしてあります) <?php header("Content-Type: application/octet-stream"); ?> <?php header("Content-Disposition: attachment; filename=output.csv"); ?> <?php include_once('connection.php'); $sql="select s.branchname,r.date,s.r.judgment,stuname,branchcode,s.syainid,r.branch,r.maxpercent from m_student s" . " left outer join (select r1.stuid,max(r1.date) date,r1.percent maxpercent,r1.judgment,r1.branch from result r1" . " where r1.percent in (select max(r2.percent) from result r2 where r2.stuid=r1.stuid) group by r1.stuid,r1.percent) r on r.stuid=s.stuid"; $rs=mysql_query($sql); for($i=0; $i<mysql_num_fields($rs); $i++){ print (mb_convert_encoding(mysql_field_name($rs,$i),"SJIS").","); //print $rs; } print("\n"); for($j=0 ;$j<mysql_num_rows($rs); $j++) { for($k=0; $k<mysql_num_fields($rs); $k++) { $str=mysql_result($rs,$j,$k); print (mb_convert_encoding($str,"SJIS").","); //print $str; } print("\n"); } ?>

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

数値や日付に見えるものを問答無用で勝手に数値として扱うのは、 Excelの仕様です。 Excelに数値扱いされそうな文字列を文字列として渡すためには、出 力時に="01000000002"というふうに引用符と等号をくっつけてやる 手口が使えます。引用符だけだと無視されます。CSVの仕様からは逸 脱した、Excel独特の記法ですので注意して下さい。

idek
質問者

お礼

お礼が遅くなりすいません。 >Excelに数値扱いされそうな文字列を文字列として渡すためには、出 >力時に="01000000002"というふうに引用符と等号をくっつけてやる >手口が使えます。引用符だけだと無視されます。CSVの仕様からは逸 >脱した、Excel独特の記法ですので注意して下さい。 この方法使いって見ます。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • ann_dv
  • ベストアンサー率43% (528/1223)
回答No.3

数値の頭の0が省略されるのはExcelの仕様です。 頭の0も表示させたいのであれば、セルの書式設定からユーザ定義を選択し、必要な桁数だけ0を入力します。 また、 例:1E+18、1E+18、1E+18 これは文字化けでは無く、Excelが自動判別してこのような書式の設定にしているだけです。

参考URL:
http://support.microsoft.com/kb/214233/ja
idek
質問者

お礼

お礼が遅くなりすいません。 Excel側でバッチを作ってみます。

すると、全ての回答が全文表示されます。
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

数値を "" で括るか、エクセルの読み込み時にテキスト読み込みのウィーザードを使って文字列として認識させるしかありません。 あとは、エクセルで読み込み用のマクロを作成するかでしょうね。

idek
質問者

お礼

お礼が遅くなりすいません。 Excel側でバッチを作ってみます。

すると、全ての回答が全文表示されます。

関連するQ&A