「未分類」カテゴリーアーカイブ

EXCELの謎仕様には涙が止まらない

データベースから一覧表形式でデータを取り出すときに、カンマ区切りテキスト(csv)形式を使うことが多い。csvはテキストデータだからパソコンでもタブレットでもスマホでもとりあえずテキストファイルが開ける環境さえあれば中を見ることができるし、csvを適切に読み込んで一覧表形式で扱えるソフトも非常に多いから、一覧表形式のデータをやり取りするのに最も汎用性が高い形式のひとつとして古くから使われ続けている。

一覧表形式のデータといえばパソコンではEXCELが事実上の標準ソフト。Windowsパソコンだとcsvファイルをダブルクリックすればほぼ間違いなくEXCELが起動する。

ところがEXCELはありがた迷惑なお節介機能が満載で、データ作成者の意図をまったく無視した勝手な解釈でcsvファイルを開く。

csv・・・・カンマ・セパレーテッド・バリューズ(カンマで区切った値たち)の頭文字でcsv。次のような文字データです。

“姓”,”名”,”国”,”年齢”
“久光”,”一誠”,”日本”,”44″
“田中”,”一郎”,”日本”,”39″
“鈴木”,”太郎”,”日本”,”50″
“バラカン”,”ピーター”,”イギリス”,”61″
“ジョン”,”万次郎”,”日本”,”187″

列をカンマで区切って、行を改行で表わすテキストファイル(テキストファイルだけど拡張子は.txtじゃなくて.csv)。テキストファイルだからメモ帳でもワードパットでも開いてデータを確認できる。EXCELで開けばカンマや改行でセルに分けられた一覧表になるし、EXCEL以外の類似したソフトでも一覧表形式で開くことができる。

システム開発でデータのダウンロード機能が求められると汎用形式であるcsv形式でダウンロードできるように設計することが多いんだが、いろんな場面で『EXCELで開けない!』『EXCELで開いたら変なデータになってる!』という抗議を受けることになる。

例えば3つの数字をハイフンでつないで作られるコードがあったとする。私に身近な例だと化学物質識別コードの「CAS No.」

“物質名”,”CAS登録番号”
“炭酸エチレン”,”96-49-1″
“エチルPABA”,”94-09-7″
“アジピン酸”,”124-04-9″
“カプリリルグリコール”,”1117-86-8″

これメモ帳にコピペして「test.csv」とか適当にファイル名付けてダブルクリックしてEXCELで開くとこうなる↓

excel1

ヲイヲイ、勝手に日付にしてんじゃねえよ。EXCELはcsvデータの中に日付っぽい表現があるとそのセルは日付にしてしまう(えーっ!)。こいつを上書き保存を実行して、再度メモ帳かワードパットでデータを確認すると

物質名,CAS登録番号
炭酸エチレン,96-49-1
エチルPABA,1994/9/7
アジピン酸,124-04-9
カプリリルグリコール,1117-86-8

このように元データの 94-09-7 をキッチリ 1994/9/7 に書き換えてしまっている。勘弁してくれよ。

EXCELは数字だけを並べた文字データを数値に変えてしまうクセもある。例えば

“名前”,”市外局番”,”市内局番”
“久光”,”046″,”869″
“田中”,”03″,”123″
“鈴木”,”06″,”345″

このcsvファイルを EXCEL で開くとこうなる↓

excel2

ヲイヲイ、勝手に数値にしてんじゃねえよ。もちろん上書き保存すると元データからも先頭の0がなくなる。

他にも文字数が多い数字の羅列を勝手に指数表示に書き替えてしまう問題もあるんだぜ。例えば13桁のJANコードを書いた csv ファイル

“商品名”,”JANコード”
“リンゴ”,”4569951116179″
“バナナ”,”1234567890123″

をEXCELで開くとこうなる↓

screen

もちろん上書き保存すると

商品名,JANコード
リンゴ,4.56995E+12
バナナ,1.23457E+12

こんなことになってしまう。他にも EXCEL のお節介機能のせいでデータが正しく表示されない&データが破壊される問題がいろいろある。

ダウンロードしたデータをメモ帳なりワードパットで開いてみればわかるが、システム側は正しく”94-09-7″とか”046″とか”4569951116179″って出力している。それを EXCEL が勝手に”1994/9/7″とか”46″とか”4.56995E+12″に書き替えちゃうわけで、明らかに EXCEL 側に問題があるんだが多くの人はそんなこと知らないので「ちゃんとしたcsvファイルを作ってください!」とcsvファイルを作ったオレが怒られる。こっちはちゃんとしたデータを出力しているのに・・・涙、涙。事情を説明して理解してくれたところで EXCEL を使うしかない会社がほとんどだから何の解決にもならんのだけどね。こんなクソ仕様のソフトなんか世の中から消え去ってくれと多くのエンジニアが思っているに違いない。そしてなんでこんなソフトが何十年もの間、世界標準でいられるのか。これは技術の優劣だけでビジネスの勝敗が決まるわけではないという好例。あ、オレ今なんかカッコいいこと言ったよ。ね、ね、言ったよね。

こちら側は正当な csv ファイルを出力しているのだから『ファイルの拡張子を .txt に変えて EXCEL の[開く]メニューを使ってそのテキストファイルを開いてください。するとテキスト ファイル ウィーザード機能が出てくるのでこれを使って列ごとの書式を[文字列]に指定して開いてください。』という EXCEL お節介機能の回避方法とか『お節介機能がない無料の表計算ソフトがあるのでそれを使ってください。』とか解決策を提示してもまず聞き入れてくれる利用者はない。

まあ、それもいたしかたなし。企業に勤めてるといってもパソコンを使う能力は社員によってピンキリだから基本的にはダブルクリック以上のパソコンスキルがない人を基準に考えないと。ほとんどの状況で「ダブルクリックすればファイルが開いてちゃんと表示される。そうならないのはシステムを作ったオマエが悪い。」という結論以外はでてこない(涙)。

さんざん泣き言をたれたけど、そんなことは遥か昔から多くのプログラマーを悩ませてきた連綿と続く問題なので EXCEL の勝手なお節介機能に対処する方法は、すでに諸先輩プログラマーの方々がいろいろと編み出してくれている(アリガトー、アリガトー)。

対処法その1【データの先頭に「’」(アポストロフィー)を入れる】

excel3

変な文字を先頭に入れておくことでデータが勝手に日付になったり、数値になったり、指数表示になったりすることを抑止する方法。アポストロフィが目立たなくていいけど、「変な文字が先頭についてるんで消してください・・・・」と怒られる。

対処法その2【データの先頭に特殊な空白文字(タブ)を入れる】

excel4

アポストロフィーじゃなくても変な文字ならなんとかなることが多い。データの先頭にタブ文字を入れておくのもその一つ。これだと見た目のうえでは問題ない表示ができる。しかし別のソフトにデータをコピペすると先頭に妙な空白がついてしかも両端にダブルクオート(”)が付いてくるので「コピペすると変になるバグを直してください」と怒られる。見た目が問題ないのにコピペしたら突如変になるというのはパソコン技能が少ない人には驚異的なバグに映る。下手するとオレがEXCELを壊したんじゃないかと疑われかねない。

対処法その3【数式にしてしまう】

excel5

この方法を知った時は思わず鼻汁出そうになった。データを「”=””94-09-7″””」とか「”=””03″””」とか書いておく。パッと見なんのことかわかりにくいんだけど、まず両端のダブルクオート(”)はcsvでデータを囲うためのもの。内側の =””03″” がデータ本体になる。””とダブルクオートが2連続になっているのはダブルクオートで囲っているデータの中でダブルクオートを使いたい場合、データの両端のダブルクオートと区別するために “” と2連続させる(エスケープさせる)というルールに基づいている。つまり””は”だから要するにcsvで「”=””03″””」と書いたデータはEXCELには「=”03″」として認識される。そして=で始まるデータはEXCELは勝手に数式であると判断する。=”ほげほげ”という数式は「ほげほげという文字である」という数式だから =”03″ なら計算結果として画面上には 03 という文字が表示されるわけだ。この方法だと数式バーの部分には数式が表示されるけど、セルには計算結果が表示されている。セルをコピーしてメモ帳とかに貼付けたときも計算結果が貼り付けされるので、コピペしたら変なことにという心配もない。

おおっ!

万事OKのようだが、この方法は EXCEL が = で始まるデータを勝手に数式であると解釈することを逆手にとっている。ということは EXCEL 以外の正しく csv データを扱えるソフトでこの csv ファイルを開くと何じゃこりゃ?な状態になる。もちろんメモ帳やワードパットで開いたときも何が書いてあるのかよくわからない数式のような何かがゴチャゴチャっと書いてある変なファイルにしかみえない。EXCEL 以外のソフトで開くことは絶対にないという前提じゃないと成り立たないこんな変なファイルはもはや csv ファイルではないんじゃないかという根本的な疑問は残る。ユーザとしては EXCELでちゃんと「表示される」ことが最優先なんだからこれで問題ないわけだけどね。

ああ、EXCELってどうしてこうもクソな仕様なんだろう。

【cosmetic-info.xxx】の申請はお済みですか?

[http://www.cosmetic-info.jp]とか[https://blog.cfms.jp/]とか[http://chakai.info]とかインターネットサイトにアクセスするための住所表示みたいなものがURLね。この中の[cosmetic-info.jp]とか[cfms.jp]とか[chakai.info]が「ドメイン」。うーん現実世界で言うと「土地」みたいなもんかな。末尾には「.com」とか「.info」とか「.net」とか「.jp」とかあって、.co.jpは日本国内の法人が1社1つだけ所有できるとか、.go.jpは日本国内の政府関係機関だけが所有できるとか、.govは米国の政府関係機関だけが所有できるとか、.ac.jpは日本国内の教育関係機関だけが所有できるとかドメインによっては所有するにあたって条件が決められていて審査があるものもあるけど、.comとか.netとか.infoとかちゃんと手続きさえすれば世界中の誰でも取得できるドメインもある。

私も個人でcosmetic-info.jpとかcfms.jpとかchakai.infoとかhisamitsu.kanagawa.jpとかいろいろ所有している。もちろん他人が勝手に使えないように管理してもらう必要があるので、ドメイン管理業者に毎年なにがしかのお金を払ってる。

さて、ドメインの末尾が「.xxx」というのも2011年から運用が始まっている。これはアダルトサイト向けに用意されたもの。URLを見ただけでそれがアダルトサイトかどうかわかるようにして、アクセスするかどうか判断しやすくすることを目的にしているんですかね。

ところでどこかの誰かがcosmetic-info.xxxというドメインを取得してアダルトサイトを始めたとする。よく知らない人がアクセスしてしまって『cosmetic-infoってこんなこともやってるのか!久光ってヤツはとんでもない破廉恥野郎だなあ』なんてあらぬ疑いをかけられてしまうかもしれない。まあ私はどっちにしても破廉恥野郎なのでいまさら誤解もなにもないんですが、これがアンタ、あんな有名企業のドメインやこんな有名商品のドメインの末尾が.xxxなんてのをどこぞの誰かが取得してアダルトサイトを運営しだしたら迷惑千万だ!と思う企業や個人も多いでしょう。そこで.xxxの運用開始に先立って「保護申請」という期間がありました。自社の社名や商標を使った.xxxドメインを取得できないように永久にブロックしてもらう申請です。ブロックしておくと誰も取得できなくなります。なんと、保護申請した本人ですら使うことができなくなります。保護申請した本人も使えないわけですから一般的なドメインのように毎年管理費をとられることはないです。保護申請時に1回支払って終わりです。

ふーん。

いや、問題はここからなんだけど。保護申請に45,000円かかるの。これって一般的なドメイン管理費の20年分とか30年分よ。アホくさくてアホくさくて。私は破廉恥野郎なので関係ないんですが、品行方正な企業にとっては「自社名.xxx」みたいなもので勝手にアダルトサイトを運用されたんじゃたまらんわけだから使うつもりもないドメインに管理費の20年分とか30年分の料金を払ってブロックするわけ。大企業だと社名以外にもいろいろ有名な商標をもってるから大変だよね。

私は破廉恥野郎なのでわざわざcosmetic-info.xxxをブロックしてません。だから今のところ世界の誰でもcosmetic-info.xxxを取得できるし、そのドメインでアダルトサイトを運用できます。その結果、cosmetic-info.jpを運営している久光がとんだ破廉恥野郎だと思われても致し方ありません。どうせ破廉恥野郎ですから。でもそのアダルトサイトが「ボーイズラブ」とかだとオレの趣味と違うのでちょっと困るかな。いや、どっちにしろ私は破廉恥野郎なのでガマンします。ところがさ、ドメイン管理会社から「【cosmetic-info.xxx】の申請はお済みですか?」というメールが定期的に届くのさ。cosmetic-info.xxxでアダルトサイトを作られたら御社の信用が落ちるよぉとかドメインの権利を高額で買い取れと要求されるかもよぉとか。だからそうなる前に保護目的で.xxxを押さえておきませんか?っていうメール。

ちょっと待て、ずいぶんとあこぎな商売だな。お前らが勝手に.xxxなんてアダルトサイト用のドメインを作っておいて、アダルトサイトに使われたくないならお金払えよって。申請した本人も使えなくなる保護申請くらいは無料にするのが筋なんじゃないのか? アダルトサイトのたまり場みたいのを作っておいてブロックしたけりゃ金払えって・・・・・いい商売だな、おい。

品行方正な会社はドメインをブロックするためだけに大金払って大変だなあ。自分が品行方正な人間じゃなかったことがこんなところで役立つとは思わなかったぜ。まったく。

PTA会長終了

小学校のPTA会長を2年つとめて、今日でやっとお役御免。まあ、先々週の卒業式でお祝いの言葉を言った時点で終わったようなもんだけどね。

卒業式の祝辞は例のごとく、原稿をポケットから出して広げて読み上げるかのようにみせてそのまま原稿は演台に置いて、演台から一歩横へズレて卒業生に向かって原稿を見ずに話すというスタイル。○○君や○○さんが見たらその場で「あー、久光さんまたやってる。まったくもうイヤラシイなぁ」と声に出して3回くらい叫ぶだろうなというお決まりのスタイル。あの場には私が口先だけで生きてきた口先三寸男だということを知ってる人は極めて少ないので無問題。ビシッとキメてきたよぉん。しかも卒業式の祝辞は2回目なのでちょっと心の余裕もあって、アドリブで小話を差し込んで保護者席から小さなウケをとるという暴挙まで実行。キッチリきめてきたよぉん。

今回は長男が卒業生なので、我が子に壇上から祝辞を述べてあげられるという滅多にない経験をさせてもらった。来賓席でカメラパチパチってわけにいかないので写真はヘタッピーなカミさんにまかせておいた。帰宅して写真を見せてもらったが、いまどきの簡単デジカメでどうしたらこういう写真になるんだろうという写真だったのはここだけの内緒話。

これでPTA活動も一段落と思いきや、来年度はPTA副会長・・・・・まだ娘が小学校にいるんでね。いや、オレはヒマじゃないんだよ。ホント。忙しいんだってば。長男は4月から中学生。どういうわけか中学校のPTA校外委員長も内定してる。まだ入学してないのに委員どころか委員長に内定してるって不思議な話。いや、オレはヒマじゃないんだよ。ホント。忙しいんだってば。明日は中学校へ行ってPTA活動の引き継ぎ会。ホント、忙しいんですよ、信じてくださいよ、刑事さん・・・・・・・・カツ丼ください