• ベストアンサー

PHPでCSVを出力する際のセルについて

PHP(LAMP)にてCSVファイルをダウンロードしています。通常の文字列として「1-21」「41-3」などの数字(住所の番地など)を表示したいのですが、自動で引き算したり年月日表示になったりしてしまいます。テキストエディタで確認した場合はキチンとでています。CSVで開く際、最初から文字列というか特に引き算や年月日状態になっていない元の状態で表示する方法をご存知でしょうか。どうぞ宜しくお願い申し上げます。

  • PHP
  • 回答数4
  • ありがとう数5

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

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

試しにやってみましたがダメみたいですね、何てEXCELって気が利いてるんだろう・・・余計なお世話って感じですけど。全角で記述してもご丁寧に半角にしてくれちゃうし。 シングルクォーテーションなら文字列扱いになるみたいですが、確かにシングルクォーテーション自体も表示されてしまいますね。これがまずければ、型指定しながらCSVを読み込むようなVBスクリプトを書いたEXCELのシートを作って配布する位しかないのかな。VBスクリプトは専門外なのでどう実装するかはわかりませんが。

RSTREET
質問者

お礼

ありがとうございます!試していただいて・・。EXCELってほんと便利ですよね。なんとか工夫してやってみます。

その他の回答 (3)

回答No.4

いっそのこと、excel で 出力するというのはどうですか? pear のパッケージに「 Spreadsheet_Excel_Writer 」というものがあり、これでは、excel のフォーマットでファイル出力ができるようです。 注意するのは、日本語のコードは、Shift-JIS ということ。

RSTREET
質問者

お礼

はい。その方向でやってみます! PHPはすごいですよね。PDF出力・グラフ出力に加えてEXCELにもなんて・・。 そういえば「phpmyadmin」もCSVやEXCELの出力ができるということはこのSpreadsheet_Excel_Writerを利用しているのでしょうか??

回答No.2

"1-21"といった文字列が数値扱いになってるという事でしょうね。CSVを生成する際、文字列部分を明示的に""または''で括ってあげると正常に表示できるかも知れません。 '100-0001','東京都千代田区', みたいな感じです。

RSTREET
質問者

お礼

ありがとうございます。やってみたのですが、プログラムで生成し、そのままCSVに吐き出した場合、そのまま「"」が残ってしまうようです。。

  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.1

それは、PHPのお仕事は既に終了していますので エクセルの方で質問されてはいかがでしょうか? 私の場合の解決方法を書きますが、もっと簡単な方法があるかもしれません ダウンロードしたCSVファイルの拡張子をtxtに変更 (便宜上download.txtと呼ぶ) download.txtを右クリックして、アプリケーションで開く>エクセルで開く そうするとAの列に 1-21,41-3 等と1行分のデータがごっちゃになって入ってくる A列を選択して データ>区切り位置 カンマやタブなどの区切り文字によってフィールドごとに区切られたデータを選択[次へ>] カンマ を選択して[次へ>] 1フィールドごと、データの形式を選択して、文字列を選択 あとはやれば分かると思います

RSTREET
質問者

お礼

ありがとうございます。TEXTをエクセルで読み出す感じですよね。確かにそのような方法もありますね! ただ、お客様に提供するので、CSVでなければいけないのです。。。お客様はTXTとCSVの区別もできませんので。。

関連するQ&A

  • データの変換(xls → csv)

    エクセルのデータの変換処理について質問します。 住所録のデータがあるのですが、 番地が数式や日付と捉えられないように、表示形式を文字列にしています。 先日データをcsvに変換する必要があり、変換したのですが、 文字列にしたはずが日付などになってしまい、 別の数字に変わってしまう箇所があります。 たとえば「5-6」(5丁目6番地)などを「5月6日」などと表示させずに、 そのまま「5-6」と表示させるにはどうしたらよいのでしょうか。 エクセルにあまり詳しくないもので、よくわかりません。 どうぞよろしくお願いします。

  • 困っています!! ExcelをCSVファイルにしたあと。

    ご存知の方にとっては恥ずかしいくらいの質問かもしれませんが、どうか教えて下さい! win xp、Office2000を使用しています。 Excelでデータの編集が終わったあとに、ファイル形式をCSVで保存するよう言われ、入力後に「ファイルの名前を付けて保存」→ファイルの種類で「CSV」を選択して保存を致しました。 その際、ファイル名は「英小文字のみ.csv」にしています。 保存後、確認の為に再度そのファイルを開いたところ、 1、文字幅に合わせて大きさを変えた列幅が基準値に戻ってしまっている。 2、「文字列」を使用して、ゼロから始まる数字を打ち込んだ列がゼロを表示しない(01>1)、数字を全角で打ち込んでいるのに半角に戻ってしまう(15>15)。 という状態になってしまいます。 テキストエディタで確認したところ、きちんとカンマで区切られてはいるのですが、上記の2に関しては、半角になったままだったりと、入力した状態での表示ではありませんでした。 保存する際に、 「英小文字のみ.csv」はCSV(カンマ区切り)と互換性のない機能が含まれている可能性があります。 というメッセージが出ます。 Excelに関しては、まったくといっていいほど初心者です。苦手で逃げていた自分が悪いのですが…。 今回CSVというファイル形式も初めて知りました…。 NETで調べたりしてみたのですが、どうしてもわかりません。 CSVにしたあとに、通常1のようになってしまうものなのでしょうか? また、入力したままの状態が表示されるようにするには、どうしたらよいのでしょうか? ご存知の方がいらっしゃいましたら、ぜひお知恵を貸してください! よろしくお願い致します!

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

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

    • 締切済み
    • PHP
  • phpでcsvをhtmlにしたい

    phpでcsvデータ(行はその都度変わる。列は5行)をhtmlに罫線をかけて 表として表示させたいのですがどのように記述したらよいかわかりません。 Win2000/Anhttpd/php4.3.2

  • csvの住所(番地)を正しく表示する方法を確認させてください。

    csvの住所(番地)を正しく表示する方法を確認させてください。 XPでExcel2007と2003です。 住所の「番地」という項目が1-2-3のとき、2001/2/3と表示されるのを修正するために、ほかの質問を参考に、下記の手順を実行しましたが、解決できませんでした。間違っている点や確認すべき点があれば教えてください。 csvデータをダウンロード > テキスト(タブ区切り)で保存 > Excel2007起動 > ファイル > 開く > 保存したファイルを選択 > テキストファイルウィザード-1/3で「カンマやタブなどの・・・」を選択 > 同-2/3で「タブ」を選択 > 同-3/3で日付表示になっている「番地」の項目を選択して、「列のデータ形式」を「標準」から「文字列」に変更 > 完了。 ちなみに、保存前(ダウンロードして開いただけの時点)で、セルの書式設定から表示形式「文字列」に変更しても、日付のままです。 また、「列のデータ形式」を「標準」から「文字列」に変更した時点でも、日付のままです。これらは関係ありますか? よろしくお願いします。

  • Excelでcsvファイルをエクスポートしても、""を残しておきたい

    csvファイルをインポートしてExcelで編集し、また、csvファイルとして書き出しテキストエディタで開くと、元のcsvファイルにはあった文字列の引用符「""」が消えてしまいます。 以前にも同じ質問があったようなのですが、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=777349 情報を編集するのではなく、新しく追加したいので""を※※に置換しておくというような方法は使えません。 誰か分かる方教えてください。 よろしくお願いします。m(_ _)m

  • エクセルcsv形式での

    住所録を作成しているのですが、番地をcsv形式で保存し再度ファイルをひらくと番地の列の数値が全然違うものに変わっています。 セルの書式設定でいろいろ試したのですが、上記と同じ状態になってしまいます。 解決方法を教えてください。 宜しくお願いいたします。

  • CSVもしくはExcelの使い方

    文字列と数字が書いてあるCSVファイルをExcelで開いて、数字の列だけ””(ダブルクォーテーション)で各セルの数字ごとに囲みたいのですが、一つ一つではなく、まとめて出来るようなやり方ってありますか? 最終的には、テキストで開いたときに、例のようになればいいのですが・・・ 例 ”200”,”1000”,ABC株式会社,”983000”, 営業,”351000”,事務,”200”

  • 4-3-2といったエクセルデータをCSV形式で保存すると・・・

    エクセルで住所録を作っています。 番地だけを別セルに入れると(4-3-2といったように)日付に勝手に変わってしまうのでそれを文字列扱いに変えて、それをいったんCSV形式で保存した後、メモ帳で開くときちんと4-3-2と表示されます。 しかし、それをまたエクセルで開くと「2004/3/2」に変わってしまいます。 何とか元のままの4-3-2にする方法はないものでしょうか・・・

  • EXCEL VBAでのCSV出力について

    EXCELに入力されたデータをCSV出力するプログラムを作成しました。データには日付が入っており年月日がYYYY/MM/DDの形で入力されています。これをハンド作業で名前をつけて保存でCSVに出力すると年月日はそのままの状態で保存されますが、VBAで保存するとMM/DD/YYYYの形になってしまいます。この状態で保存されると、次にEXCELで読み出すと年月日が文字列扱いになってしまいます。新しいマクロの記録で行っても結果は同じでした。 VBAで保存する際、YYYY/MM/DDで保存する方法はないでしょうか。 また、MM/DD/YYYYで保存されたCSVを日付としてEXCELに認識させる方法はあるでしょうか。 教えてください。よろしくお願いします。