VB.NETでEXCEL内の指定した範囲を取得

解決


ぺんぺんぺん  2005-12-13 01:01:00  No: 128816

環境はVB.NETです。

例えばEXCEL内の「A4:D20」だけDATASETに格納して
DATAGRIDで表示すると言う事をやりたいのですが
「A1:D3」には色々な情報が記入されていると言う
EXCELファイルの場合で、ADOでのデータの取得はできますか?

色々なサンプルを見る限りでは、EXCELがきれいな表形式でないと
ADOでは取得出来なさそうです。。。


魔界の仮面弁士  2005-12-13 12:26:09  No: 128817

Jet Providerでアクセスするなら、シートを指定して読み込むのではなく、
セル範囲を指定して読み込めば、取得できる可能性があります。
ただし、レジストリ設定如何では、データ型の判定が揺れる事があります。

セル情報をデータとしてではなく、フィールド名として読み込む方式を
用いれば、データ型の揺れにも対応できますが、それだと効率が悪いので、
いっそ、Excelをオートメーションで読み込んだ方が良いかも知れません。


ぺんぺんぺん  2005-12-15 21:01:46  No: 128818

色々調べて見ましたが、オートメーションで読込むしかないようでした。
(技術的にも分かりやすかったですし。。)

ただ、一点分からない事があります。
セルから値を取得する際にセルの中身が空の場合以下の取得方法では
エラーが出てしまいます。(DBNULLを使えと言う内容です)

a.text= CType(xlSheet.Cells(2, 3), Excel.Range).Value.ToString()
b.text= CType(xlSheet.Cells(2, 3), Excel.Range).Value.ToString()
c.text= CType(xlSheet.Cells(2, 3), Excel.Range).Value.ToString()
                    ・
                    ・
                    ・
                    ・

Try・Catchで拾ってしまうのが一番簡単なのかもしれませんが
上記のようなコードがあえて沢山必要なのです。

どのように対処すれば良いでしょうか?


特攻隊長まるるう  2005-12-15 22:06:58  No: 128819

ToString をやめてDBNULLを使う自作関数作れば?


ぺんぺんぺん  2005-12-16 00:02:39  No: 128820

ToStringを理解していなかったようです。

もう1つ質問させてください。
EXCELからデータを取得する際は、みなさんどのように型指定
して取得していますか?

あるセルには時間が入力されています。
取得すると「9:00」と入力されている内容が「0.375」と
取得されてしまいます。

EXCELの書式設定を全て文字列にしてしまえば良いのでしょうが、
そうではなくどのような型にも対応できるように、VB.NET側で対応
したいのです。

どうぞよろしくお願いいたします。


ぺんぺんぺん  2005-12-16 00:21:01  No: 128821

すみません。
質問内容がおかしいですね。

EXCELから取得したデータの型を画面上のテキストボックス
(編集可にしたい)に表示をしたいのですが、STRING型に変換
しないと表示できませんよね。

String型に変換をしてしまうとあるセルの内容がおかしくなってしまいます。
「9:00」  →  「0.375」

これをそのまま(9:00)表示するにはどうすれば良いでしょうか?


特攻隊長まるるう  2005-12-16 01:14:03  No: 128822

Value やめて Text 使えば?


ぺんぺんぺん  2005-12-16 01:24:51  No: 128823

できました!!!

感謝感謝です。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加