« eye-fiで快適デジカメ生活。デジカメだけでフリッカーに即時写真アップロード! | メイン | 『OpenSocial入門』日本初のOpenSocial本でPartuzaを試す »

Webアプリとエクセルとを連携させながらも、先頭のゼロを残す方法あれこれ このエントリーを含むはてなブックマーク BuzzurlにブックマークBuzzurlにブックマーク

image 山本ゆうごです。業務アプリネタです。業務アプリも大半がWebになってきては居ますが、最終的なレポーティングはエクセルを通してグラフに変換されていたりします。その際に、よく起るのが、先頭のゼロがなくなるということ。いろんなルートでWebからエクセルにデータを取り込んでも、先頭のゼロがなくならない秘訣をご紹介。(ちなみにエクセルは2003でテストしています。2007で動かないときにはコメントください)

先頭のゼロが消えないCSVを作る

とりあえずファイルインターフェイスとして、CSVを出すというのが一番お手軽なエクセルとの接続です。

CSVで文字列を表すのにはダブルクォーテーションをつければいいような気もします。こんなcsvを作ります。

name,telno
"yugo","09012345678"

拡張子をcsvにしておくと、ダブルクリックでエクセルが起動します。・・・・が、こんなことになります。

image

あっけなく、先頭のゼロが消えてしまい、電話番号のつもりが、やたらと桁数の多い指数表記の数値扱いになってしまっています。

これを回避する「模範解答」は、ダブルクリックするのではなく、「外部データの取り込み」機能を使って、ウィザードで列ごとに型を指定することで、正しく文字列扱いで取り込むことができます。よく「先頭にクォーテーションをつければいい」という解も見かけるのですが、それはエクセル上で直接入力する際に効力を発揮しますが、csvのフィールドの先頭にクォーテーションがついても、そのまま見えてしまうだけでした。

そういうまどろっこしいのがヤな人は、こういうcsvにすればOK。

name,telno
"yugo",="09012345678"

はい、イコールをつけているだけ。つまり、エクセル上で式として文字列を表現しているということです。もちろんこれはエクセルのためだけの逃げ手なので、csvとしては正しくありませんが、その後の業務がエクセルであればいいでしょう。

HTMLのテーブルからコピー&ペースト

あまり知られていませんが、ブラウザ上のテーブルをコピー&ペーストすると、エクセルはそれを解釈してちゃんとセルに分割してくれます。この機能、IEでもFirefox3でも動作はしますが、これ以降の話はIEでのみ動きます。

image 範囲を選択して、コピー。そして

image ペースト。

すると、ちゃんとhtmlテーブルが、スプレッドシートに変換されます。100行くらいのデータならこれが簡単です。ところが、やっぱり電話番号の先頭の0が消えてしまって、指数表記になってしまっています。

HTMLの場合はcssがあるので、cssを使って無理矢理「ここは数値じゃないよ!」ということを主張出来そうです。

もともとエクセルには、htmlの保存形式があります。なので、エクセルであらかじめ、先頭のゼロが生き残るセルを用意して、それをHTML保存すれば、「エクセルが先頭のゼロを残してくれるスタイルシート」なるものが発見できるかも知れません。

そして、試して見ましたよと。

http://mtl.recruit.co.jp/sandbox/yuugo/te/table.html

<td style="mso-number-format:'\@'">

これが強制文字列のおまじない。

image コピーして

image ペーストしても、先頭のゼロが消えてなくなりません。めでたしめでたし。

Webクエリを用いる方法

コピー&ペーストはあまりにも業務としては手作業が過ぎます。そういう時のために、エクセルにはWebクエリという機能があります。

image image

こんな風に、ブラウザで見ているURLを指定すると、その中でテーブルタグを見つけてくれて、エクセルに取り込むことができます。一度設定すれば、あとは更新ボタンを押すだけで、最新のデータが取得できるので、よりマスタの同期が容易です。

これであらじめ、セルのスタイルを文字列にしておけば、先頭のゼロが保存されるかと思いきや、html側に何も指定をしなければ、やっぱり先頭のゼロは取り除かれてしまいます。

そういう場合にも、先のコピー&ペーストと同様に、先ほどのエクセルのスタイルシートをhtmlに適用し、数値であっても文字列扱いしたいセルに、<td style="mso-number-format:'\@'">とつけると、Webクエリでも先頭のゼロが保存されます。

トラックバック

このエントリーのトラックバックURL:

コメントを投稿

※ 必ず利用規約をお読み頂き、同意の上送信して下さい。また、トラックバック元・リンク先の内容には、リクルートは一切責任を負いません。

※ 必ず利用規約をお読み頂き、同意の上送信して下さい。

最近のコメント

Tag cloud