• 締切済み

CSV出力時の”0”表示(電話番号等)について

PHPでDBのカラムから配列で取得したデータをcsv出力しダウンロードさせるプログラムを作成しています。 csv形式でのダウンロードは完了していますが、電話番号などの頭に’0’が入る文字列は’0’が消えてしまいます。(例:03→3) ダウンロードしたcsvをエディタで開くと’0’は表示されます。 この場合、どのような制御をPHP側ですればいいいでしょうか。 よろしくお願いします。

  • yorog
  • お礼率35% (28/79)
  • PHP
  • 回答数5
  • ありがとう数3

みんなの回答

  • cooz7654
  • ベストアンサー率77% (7/9)
回答No.5

0120-1234-5678 等と最初からハイフンを含むデータ形式で無い場合、 EXCELの仕様上厳しそうに感じますね。

yorog
質問者

お礼

ありがとうございます。 そんな逃げ道がありましたか。 今後の課題とはなりますが、今回厳密な仕様にしていないのでそれを使わせていただ きます!

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.4

#1です。 皆様が言われているExcelの仕様というのが、正直な回答です。 エディタでも03と表示したいのならば、Excelを使わないこと です。

noname#24096
noname#24096
回答No.3

参考になるか分かりませんが、私も以前同じ問題に悩んだことがあります。 色々とやりましたが結局 「EXCELのCSVファイルを読み込む際の仕様なのでどうにもならない」 という結論になりました。 (数字部分は数値として自動認識してしまうため) 代替手段としては、拡張子をcsvからtxtなどに変更し EXCEL起動>ファイル>開く>ファイルの種類=テキストファイル で開くとテキストファイルウィザードが起動しますので 「カンマ区切」「列のデータ形式=文字列」を指定して開くという方法を取ってもらいました。

yorog
質問者

補足

ありがとうございます。 Excelの仕様とゆう点も知っていますが、他に方法があると聞いたことがあるので開発に携わっている方ならご存知かと思うのですがやはり難しいようですね。 他に方法がないのであれば諦めます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

"='03xxxxyyyy'" これはPHPではなくエクセルの問題です。 ここまでしてエクセルでCSVを直接読みこみすべき ではないと思いますが・・・。 エクセルの仕様をよく検証なさってみてください。

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.1

出力したCSVファイルをどのような目的で使われるのですか? ただ単純に、Excelで開いて見るのでしたら、「'03」と いうように「'」を前に付けてみてください。文字列として判断 されるはずです。 ただ、この場合、テキストエディタでは、「'03」となっている ため、2次加工するには、注意が必要です。

yorog
質問者

補足

csvを開いた時に”03”と表示をさせたいです。 ’を付与しての方法は知っているのですが、 csv出力用にデータをセットする祭に、 $phone = "'".$phone としても直接 ’03 と表示されてしまいます。 よろしくお願いします。

関連するQ&A

  • csv出力について

    JDBCでDBからデータを取得して、そのデータをCSV形式でEXCELに出力したい のですが、どのようにすればいいか教えてください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 【エクセルVBA】OraDBのデータをCSVへ出力

    VBA初級者です。 oracleDBのデータをCSVへ出力するマクロをVBAで作成中ですが、実装方法が分からず困っています。 ・DB接続はoo4o ・エクセルは2010 ・SQLで取得したデータを1レコードづつCSVに書き出す ・カラム名をヘッダーとして書き出す 以下のような実現方法でできるか…?と考えたものの、 肝心のマクロ(VBA)でのDBデータの取得⇒CSVへの書き込み方法がいくら調べてもわかりません。 CSVからDBへのインポートはたくさんあったのですが…。 そもそも取得したレコードを配列で保持する、という考え方が合っているのか?ヘッダー(カラム名)はどのように書き出せばいいか? など疑問が尽きません。何卒お力添え頂ければ幸いです。 --ボタンクリック時のアクション-- (1)変数定義 (2)DB接続情報確認 (3)DB接続 'DB接続 Set oraSession = CreateObject("OracleInProcServer.XOraSession") Set oraDatabase = oraSession.OpenDatabase(dbSid, dbUser & "/" & dbPass, ORADB_DEFAULT) (4)書き込み用のCSVファイルを作る (5)SQLを実行し返ってきた結果をsplit関数で配列としてwriteListにAddする (5)作成したCSVファイル内にwriteListのデータをPrint #で書き出す (6)完了メッセージを表示 MsgBox "完了しました " (7)DBの切断 'DBクローズ Set oraDatabase = Nothing Set oraSession = Nothing --SQLを実行するメソッド-- (8)SQLを記述、SELECT結果を(5)に返す 恐れ入りますがよろしくお願いいたします。

  • マクロCSV出力

    Sheet1に入力されている値をCSVファイルに出力したいと思っております。 但し、特定のセルだけを取得して、1つのファイルに出力したいと思っています。 (1)D2~G2に入力されている値を取得 (2)E4~E10までと、E4~E10の最終列までの値を取得 (3)B11の値を取得 (4)A13~A列の最終行まで、A13~A列の最終行の最終列までの値を取得 (1)、(2)、(3)、(4)の値を取得して、1つのCSVファイルに出力するプログラムを作成したいと思っております。 (1)は1行目に出力 (2)は2行目~8行目に出力 (3)は9行目に出力 (4)は10行目以降に出力 出力の形式は ”TEST”,” ”,”SMP”のようにダブルクォーテーションで値を囲って出力したいと思っています。 値が入っていないセルは” ”,としたいと思っております。 サンプルを作成して頂けないでしょうか。

  • CSVファイルへ出力

    jspとjavaBeansを使用しています。 顧客情報をDBから検索して明細を画面出力し帳票印刷する ために、データをCSVファイルへ出力したいのですが、 どうやってCSVファイルへ出力するのでしょうか? ごく簡単な形式でいいので教えて下さい。

    • ベストアンサー
    • Java
  • 【エクセルVBA】DBのデータをCSVに

    VBA初級者です。 oracleDBのデータをCSVへ出力するマクロをVBAで作成中ですが、実装方法が分からず困っています。 ・DB接続はoo4o ・エクセルは2010 ・SQLで取得したデータを1レコードづつCSVに書き出したい ・カラム名をヘッダーとして書き出したい 以下のような実現方法でできるか…?と考えたものの、 肝心のマクロ(VBA)でのDBデータの取得⇒CSVへの書き込み方法がいくら調べてもわかりません。 CSVからDBへのインポートはたくさんあったのですが…。 そもそも取得したレコードを配列で保持して書き出す、という考え方が合っているのか?ヘッダー(カラム名)はどのように書き出せばいいか? など疑問が尽きません。何卒お力添え頂ければ幸いです。 --ボタンクリック時のアクション-- (1)変数定義 (2)DB接続情報確認 (3)DB接続 'DB接続 Set oraSession = CreateObject("OracleInProcServer.XOraSession") Set oraDatabase = oraSession.OpenDatabase(dbSid, dbUser & "/" & dbPass, ORADB_DEFAULT) (4)書き込み用のCSVファイルを作る (5)SQLを実行し返ってきた結果をsplit関数で配列としてwriteListにAddする (5)作成したCSVファイル内にwriteListのデータをPrint #で書き出す (6)完了メッセージを表示 MsgBox "完了しました " (7)DBの切断 'DBクローズ Set oraDatabase = Nothing Set oraSession = Nothing --SQLを実行するメソッド-- (8)SQLを記述、SELECT結果を(5)に返す 恐れ入りますがよろしくお願いいたします。

  • csvファイルの電話番号が正しく表示されない

    取引先のデータをExcelのcsv形式ファイルでもらったのですが,電話番号の項目がおかしく なって困っています。具体的には電話番号の上1桁めの「0」が欠落してしまっています。 csvファイルをメモ帳で開くと電話番号が「03XXX・・・」なのに,Excelで開くと「3XXX・・・」と なってしまいます。 電話番号の項目の書式をあらかじめ文字列にしておくというようなやり方はあるのでしょうか。 電話番号の上1桁めは市外局番でも携帯でも「0」なのでほぼ全滅状態で困っています。 よろしくお願いします。

  • csv出力した内容を配列で取得できますか?

    データベースのテーブル内容をサーバー上にcsv出力すると同時に出力した内容を配列で取得できないでしょうか?(PDOを利用しています) $sql= "SELECT id, name FROM tb INTO OUTFILE '/tmp.csv'"; $stmt = $dbh->query($sql); これでcsvは出力されるのですが、csv出力した内容を配列で取得したく、 $array = $stmt->fetchAll(PDO::FETCH_ASSOC); をするとGeneral Errorとなります。 先にSELECTで内容を配列で取得してから配列のループでcsvの内容を作成し、出力する方法もありますが、データ量が数十万件あるのでループ処理が遅い気がしています。 良い方法があればお教えください。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • DBからのCSVファイルダウンロード

    MySQLに溜めたデータをCSV形式でダウンロードしたいと思っていますが、ダウンロードしたファイルが文字化けして困っています。 PHP、DBともにEUCで作成しているのですが、プログラムの中に文字コードに関する記述が必要になるとは思うのですが、何を追加すればいいのか教えていただけますでしょうか?

    • ベストアンサー
    • PHP
  • DBからCSV出力する方法

    DBのデータをCSVファイルでダウンロードする機能を作成しています。 DBのデータをカンマ区切りで変数に格納するところまではできましたが、CSVでのダウンロード(ダウンロードダイアログ)ができません。 以下が実際の記述ですが、間違いを指摘いただけないでしょうか。 ※$result 出力するデータ全てが,区切りで格納されている <PHPファイル内> $size = strlen($result); $filename = csv_dl.csv; //csvdll header("Content-Disposition: inline; filename=\"".basename($filename)."\""); header("Content-Length: ".$size); header("Content-Type: application/octet-stream"); 以上です。 リターンが遅くなるかもしれませんが、どうかよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • ダブルクォーテーションつきでCSV出力したい

    今、PHPを勉強しています。 PHPでデータベースからとりだした配列を、CSVファイルに出力するサンプルプログラムをみつけました。 https://blog.supersonico.info/?p=869 このプログラムをそのまま実行すると、 CSVファイルに、 あああ,いいい,ううう,えええ かかか,ききき,くくく,けけけ と出力されます。 これを、ダブルクォーテーションつきで、 "あああ","いいい","ううう","えええ" "かかか","ききき","くくく","けけけ" と出力するにはどうすればいいのでしょうか? ***************************************** $csvFileName = '/tmp/' . time() . rand() . '.csv'; $res = fopen($csvFileName, 'w'); if ($res === FALSE) { throw new Exception('ファイルの書き込みに失敗しました。'); } $dataList = array(        //↓ここにダブルクォーテーションで囲ってもうまくいかない。↓ array('あああ','いいい','ううう','えええ'), array('かかか,'ききき','くくく','けけけ'), ); foreach($dataList as $dataInfo) { mb_convert_variables('SJIS', 'UTF-8', $dataInfo); fputcsv($res, $dataInfo); } fclose($res);

    • ベストアンサー
    • PHP