診断士の経営視点とSEのシステム技術の両面からIT・システム開発・Web技術+アウトドア情報を提供しています

トップブログでつくるビジネスサイト無料ブログでここまでできるCMSでつくるビジネスサイトウェブ講座&SEOシステム開発個人情報保護Googleでお仕事信州撮っておき情報








スポンサーサイト 

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[--------] スポンサー広告 | |

Excelにもデータ型があった 

表計算ソフトExcelにもDB同様データ型の定義があった

表計算ソフトとしてソロバン代わりに使われているマイクロソフトのエクセル(Excel)だが、現在では単なる表計算だけでなく、業務システムの集計・印刷加工のためのツールとしての使い方も広まっている。

入力したデータをAccessやPostgreSQL,MySQL,Oracleなどのデータベースに格納し、クエリーなどプログラム処理で抽出した後、印刷や集計をExcelに任せるという使い方だ。プログラムで集計処理や印刷レイアウトを実行するのに比べて開発工数が圧倒的に削減できる。加えてユーザ側に処理を委ねることで非定型処理などへの対応が柔軟に行えるメリットもある。

ところがDBからExcelにデータを引き渡す際に困ったことが起こってしまう。

Excelとデータベースの連動時に発生する困ったこと

当然のことながらデータベースは各フィールドごとに文字型・数値型・日付型・論理型などのデータ型を厳密に定義している。DBから抽出したデータもDBの定義に従ったデータ型に適合している。ところがこれらのデータをExcelで受け取ると予想外のデータ型として処理されてしまう。

DBの数量や単価のデータは数値型で定義されている。このデータをExcelに渡す。Excelでの表示は 12,345.78 などのカンマ編集付きの書式を設定する。これで大丈夫のハズだが・・・

数値型のデータが文字列に化けた!

ところが一定行(実験では4056行)以降のデータが文字列として表示、認識されている。本来なら数値なので右詰めで12,345.78 と表示されるハズのところが、左詰めの表示となり、このデータを使ってDBを更新すると、データ型違反のSQLエラーが発生する。

DBから抽出したデータなので数値型以外のデータは存在しないにもかかわらず、何回読み込み直しても、書式を再設定しても、結果は同じである。

どうもExcelは読み込み時に一定行までしか実データを検査していないようだ。しかも一定行以降は文字として処理を強行している。困ったことだ。

問題の回避策が見つかった

困ってばかりもいられないのでネットで検索すると下記のサイトが見つかった。

Excel ワークシートをリンクする際のデータ型問題を回避する方法

このサイトではExcelのシートをAccessのリンクテーブルとして使用する際の不都合だが、原因は同じだ。

Excelにもデータ型の指定があった

詳細は上記サイトを見ていただくとして、佐藤が理解したところを簡単にまとめると

  • 実はExcelにもデータ型という概念がある
  • データ型と書式はまったく別のモノである
  • データ型は入力時あるいは確定時に決定される
  • セルの値が確定した時点でExcelが入力値からデータ型を決定する
  • 従って、いくら書式を設定してもデータ型には影響ない
  • つまりExcelが一旦文字型だと決定したら書式設定では数値型には戻らない

ここからは佐藤の実験による補足

  • 他のDBからデータを取り込む際にExcelは一定行までしかデータを検査しない
  • Excelは一定行以降は文字型として取り込みを強行する

一定行以降のデータが勝手に型変更されてしまったらデータ加工用のツールとしてはExcelは使えない!!!

Excelによるデータ型の一方的な変更に対する回避策

上記サイトによると、『何とExcelでもデータ型が指定できる!』 らしい。

Excelのデータメニューから文字区切り(??)を選択し、ウィザードで標準(=数値)をチェックして確定すると、指定のセルの値が数値型として処理されるようになった!!

表示も右詰めの 12,345.67 になり、データベースへの更新でもエラーは起こらない。

しかし、何で 区切り文字 の設定でデータ型を指定しなければならないのか? 発想が理解できない。

Excelをデータ加工ツールとして活用する場合の注意事項

データベースからデータを取り込んだ後、Excelによる勝手なデータ型の設定を打ち消すために、セル範囲を指定して、区切り文字ウィザードで数値型なら標準を、文字型なら文字を指定しておくこと。

上記の指定は数値型のセルすべてに対して行う必要がある。結構面倒で時間がかかる。こんなことをするよりExcelが取り込んだデータすべてを検査するか、一定行で検査を打ち切るなら以降は同じデータ型にしておいてくれれば問題はないのだが・・・。Office2007に期待するしかないか。


[2006-08-31] システム開発 | TB(0) | CM(0)

RSSリーダ 

一昨日の講演会の後、指定のRSSを取得して一覧表示するプログラムの話で盛り上がった

AJAXで実現したよ などと言ってしまったが、見つからない!!! 知的情報管理が不十分だった。

とりあえず Java で実現した例を示す。このブログのRSSを取得して表示します。(表示形式が汚いのはご容赦)

複眼ブログのRSSを取得して表示するページ


[2006-05-25] システム開発 | TB(0) | CM(0)

久しぶりにLinux上にPostgreSQLをインストールしました 

Linuxはプリインストール済み

毎日使ってはいますが、新しいシステムの開発で必要になったため、新規にLinuxサーバを購入しました。客先の意向でRedHatES4のプリインストールモデルになりました。

以前は自分でインストールしていました。プリインストールではどんな設定でインストールされているのか? おっかなビックリで起動してみると、Linuxとしてはちゃんと動きます。しかもGUIです。

ディスクは36GBを基準に適当にパーティションが切られていました。

データベースサーバとして使う

あとはPostgreSQLをインストールして、DBサーバとして使えるようにすればOKです。

ディスク上にRPMがあるので、インストール画面でチェックを入れて更新するだけです。簡単です。Linuxもずいぶんとっつきやすくなったものです。

ところが

postgresユーザを作り、DBをinitしようとすると・・・

 ⇒ 久しぶりにLinux上にPostgreSQLをインストールしました の続きを読む
[2006-03-03] システム開発 | TB(0) | CM(2)

松本ソフト開発センターのブログ「ずくだす」にWebサイトのプライバシーポリシーに関する記事を投稿しました 

プライバシーポリシーは必要か?

プライバシーポリシーに何を書けばいいか?

Webサイトのプライバシーポリシーとは?

このような記事を松本ソフト開発センターが主宰するポータルサイトのブログFROMずくだすに投稿しました。


[2006-03-01] システム開発 | TB(0) | CM(0)

松本ソフト開発センターのブログ「ずくだす」に投稿しました 

記録は身を助ける

システム屋が記録に助けられた実話を松本ソフト開発センターが主宰するポータルサイトのブログFROMずくだすに投稿しました。


[2006-02-22] システム開発 | TB(0) | CM(0)






トップブログでつくるビジネスサイト無料ブログでここまでできるCMSでつくるビジネスサイトウェブ講座&SEOシステム開発個人情報保護Googleでお仕事信州撮っておき情報
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。