2005年10月13日木曜日

CSV、エクセルで、電話番号を文字列として開きたい。

データベースのデータをプログラムでCSVに出力して、エクセルで再利用するというシーンは良くありますが、ここで問題なのは、csvファイルをダブルクリックして読み込むと、数字のみの項目で、先頭が0を含んでいる場合(コード番号、電話番号等)、0が落されて表示されてしまいます。(文字列でなく数値として扱われる。)
回避策はないか?
=>試行錯誤した結果できました。.. "0123456"
先頭に半角空白を入れる => ×
先頭に全角空白を入れる => ×
先頭に'を入れる => × ('が表示される)
先頭にCTRL+P(制御コードを入れる) => (・が表示される)
先頭にCTRL+I (タブを入れる) => OK
とういうことで、タブを入れると、見事にタブは落されて、
0123456となりました。これって、今後も通用する方法なのだろうか?

12 件のコメント:

  1. エクセルバジョーンによりだめなものもありました。
    というか私のエクセルがおかしいのか??

    返信削除
  2. 再度挑戦:
    "0123456"の先頭に\n(改行)を入れるとOKでした。

    返信削除
  3. はじめまして。リファラで少し調べものがあって、検索エンジンから辿りつきました。
    わたしは二通りで対応しています:
    1) 拡張子をtxtにしてウィザードから文字列指定で読み込み
    2) 文字列の先頭にダミー文字列を挿入し読み込み後に置換
    2)の方法は今回のやり方と似ていますが、「0」→「dummy_0」と置換して保存し、読み込んだ後に「dummy_」を消します。
    マイクロソフトの製品は便利なようで不便なところがあって困ることがありますよね。むー。

    返信削除
  4. >マイクロソフトの製品は便利なようで不便なところがあって困ることがありますよね。
    そうなんです。何も処理せずそのまま文字列で取り込んでくれればいいのに。。

    返信削除
  5. 私もいろいろと探してみて、ようやくこんな方法が紹介されていました。
    数値に変換したくないデーターを(たとえば「012345678」というデーターの場合)「="012345678" 」という具合に=""で囲うという方法です。
    この方法で、スマートにダブルクリックで文字列として入りました。
    以下のサイトです。
    http://cgi.fuji.ne.jp/~fj2094/cgi-bin5/wwwlng.cgi?print+200504/05040016.txt

    返信削除
  6. CSVファイルをエクセルで読込むと数字が数値に・・

    いろいろなデーターを編集しているときに、CSV形式のファイルというのを良く使いま...

    返信削除
  7. Scmuさん情報ありがとうございます。試したところ、
    文字列として入りました。
    ただ表示は、012345678ですが、入ったカラムをみてみると、="012345678" ですね。
    私は、"012345678"の先頭に\r=CRを入れて対応しています。(\r\nではありません。\rです)
    これだと、表示もカラムも012345678で見た目は完璧です。(この仕様で顧客に納品しています。)
    ただ、エディターで開くと改行してますが。

    返信削除
  8. library さん
    なるほど・・確かに=""が残ってました。
    自分のブログでもこの方法について書いてしまったのですが・・
    ただ、文字列の頭に"\r"を付加してみても、なんかうまく行かなかったのですが・・
    csvファイルの中の、対象となる文字列のあたまに、ただ\rを付けるんですよね?

    返信削除
  9. Scmuさん今晩は。
    はい、"\r0123”で””で囲って、文字の先頭に
    \r=0x0dを入れます。
    \rは、制御コードで0x0dです。
    単純に、”
    01234”
    というようにwindowsの改行(0x0d、0x0a)を入れてもいいのですが、これだとカラム内容を見ると1行改行されます。

    返信削除
  10. こんにちはlibraryさん。
    私の使っているエクセルは2003なんですが、エディタで”\r012345”(半角です)の入ったcsvファイルを作って、ダブルクリックでエクセルに読込ませても、セルには\rがそのまま表示されてしまいますが・・??
    やり方が違うのでしょうか?

    返信削除
  11. こんにちは。Scmuさん。
    言葉足らずですみません。\rは文字の\とrではなくて、1バイトの制御コード(10進で13,16進で0x0d)です。通常のメモ帳のエディターだと入力できません。
    私は、CSV出力はプログラムから”後に、1バイトの0x0dを出力して、その後に続きの文字を出力しています。
    秀丸エディタでも、制御コード13は入力できないですが、単純に
    "abc","
    01234567","efg"
    として、保存の時に改行=CRとして保存すると、改行が0x0dになるので01234567として読み込んでくれます。

    返信削除
  12. ですよね~
    エディタで検索では\nが使えるので、このような場合には使えるのかと思ってしまいました。
    昔のDosのエスケープシーケンス入力みたいですな。
    ありがとうございました。

    返信削除