データベースのデータをプログラムでCSVに出力して、エクセルで再利用するというシーンは良くありますが、ここで問題なのは、csvファイルをダブルクリックして読み込むと、数字のみの項目で、先頭が0を含んでいる場合(コード番号、電話番号等)、0が落されて表示されてしまいます。(文字列でなく数値として扱われる。)
回避策はないか?
=>試行錯誤した結果できました。.. “0123456”
先頭に半角空白を入れる => ×
先頭に全角空白を入れる => ×
先頭に’を入れる => × (’が表示される)
先頭にCTRL+P(制御コードを入れる) => (・が表示される)
先頭にCTRL+I (タブを入れる) => OK
とういうことで、タブを入れると、見事にタブは落されて、
0123456となりました。これって、今後も通用する方法なのだろうか?
“CSV、エクセルで、電話番号を文字列として開きたい。” への12件の返信
コメントは受け付けていません。
エクセルバジョーンによりだめなものもありました。
というか私のエクセルがおかしいのか??
再度挑戦:
"0123456"の先頭にn(改行)を入れるとOKでした。
はじめまして。リファラで少し調べものがあって、検索エンジンから辿りつきました。
わたしは二通りで対応しています:
1) 拡張子をtxtにしてウィザードから文字列指定で読み込み
2) 文字列の先頭にダミー文字列を挿入し読み込み後に置換
2)の方法は今回のやり方と似ていますが、「0」→「dummy_0」と置換して保存し、読み込んだ後に「dummy_」を消します。
マイクロソフトの製品は便利なようで不便なところがあって困ることがありますよね。むー。
>マイクロソフトの製品は便利なようで不便なところがあって困ることがありますよね。
そうなんです。何も処理せずそのまま文字列で取り込んでくれればいいのに。。
私もいろいろと探してみて、ようやくこんな方法が紹介されていました。
数値に変換したくないデーターを(たとえば「012345678」というデーターの場合)「="012345678" 」という具合に=""で囲うという方法です。
この方法で、スマートにダブルクリックで文字列として入りました。
以下のサイトです。
http://cgi.fuji.ne.jp/~fj2094/cgi-bin5/wwwlng.cgi?print+200504/05040016.txt
CSVファイルをエクセルで読込むと数字が数値に・・
いろいろなデーターを編集しているときに、CSV形式のファイルというのを良く使いま…
Scmuさん情報ありがとうございます。試したところ、
文字列として入りました。
ただ表示は、012345678ですが、入ったカラムをみてみると、="012345678" ですね。
私は、"012345678"の先頭にr=CRを入れて対応しています。(rnではありません。rです)
これだと、表示もカラムも012345678で見た目は完璧です。(この仕様で顧客に納品しています。)
ただ、エディターで開くと改行してますが。
library さん
なるほど・・確かに=""が残ってました。
自分のブログでもこの方法について書いてしまったのですが・・
ただ、文字列の頭に"r"を付加してみても、なんかうまく行かなかったのですが・・
csvファイルの中の、対象となる文字列のあたまに、ただrを付けるんですよね?
Scmuさん今晩は。
はい、"r0123”で””で囲って、文字の先頭に
r=0x0dを入れます。
rは、制御コードで0x0dです。
単純に、”
01234”
というようにwindowsの改行(0x0d、0x0a)を入れてもいいのですが、これだとカラム内容を見ると1行改行されます。
こんにちはlibraryさん。
私の使っているエクセルは2003なんですが、エディタで”r012345”(半角です)の入ったcsvファイルを作って、ダブルクリックでエクセルに読込ませても、セルにはrがそのまま表示されてしまいますが・・??
やり方が違うのでしょうか?
こんにちは。Scmuさん。
言葉足らずですみません。rは文字のとrではなくて、1バイトの制御コード(10進で13,16進で0x0d)です。通常のメモ帳のエディターだと入力できません。
私は、CSV出力はプログラムから”後に、1バイトの0x0dを出力して、その後に続きの文字を出力しています。
秀丸エディタでも、制御コード13は入力できないですが、単純に
"abc","
01234567","efg"
として、保存の時に改行=CRとして保存すると、改行が0x0dになるので01234567として読み込んでくれます。
ですよね~
エディタで検索ではnが使えるので、このような場合には使えるのかと思ってしまいました。
昔のDosのエスケープシーケンス入力みたいですな。
ありがとうございました。