- PR -

C# で Excel の任意シートの任意セルの内容を読むには

1
投稿者投稿内容
LOBO
会議室デビュー日: 2004/07/22
投稿数: 11
お住まい・勤務地: 愛知
投稿日時: 2004-07-26 00:36
C#.NET にて、Excel の任意シートの任意セルの内容の読み込みを
行いたいのですが、その手法を教えてください。

具体的には、アンケート用紙のようなレイアウトは固定ではある
けれども、その中で必要な情報を持ったセルの配置が複雑なシート
より、必要なセルの情報を取り出したいのです。
さらに、シート内で 1 ページ分に当たる例えば 10 × 20 のセル
範囲が(入力者の COPY&PASTE により)縦に任意の回数繰り返され、
その構成のシートもブック内に複数存在する(ただし、シート名
は既定ルールに則る)。そういった構成のブックが複数寄せられ
ることを想定します。
これらの Excel ファイルを読み込み、データベースに入力値を
登録したいと考えています。

お聞きしたいことは以下の4点です。
@実現可能でしょうか?
A実現可能であれば、どのような手法で行えばよいでしょうか?
Bその手法は、C#.NET パッケージのみで可能でしょうか?
CC#.NET のみでは不可能である場合、他に必要なコンポーネント
 は何でしょうか?

簡易な矩形のセル範囲を命名してレコードセットとして取得する
手法は過去のスレッドなどから可能であると分かったのですが、
想定するケースに当てはめることができませんでした。

長文をお読みいただき、ありがとうございます。
どうか、お知恵をお貸しください。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-07-26 08:48
引用:

LOBOさんの書き込み (2004-07-26 00:36) より:

お聞きしたいことは以下の4点です。
@実現可能でしょうか?
A実現可能であれば、どのような手法で行えばよいでしょうか?
Bその手法は、C#.NET パッケージのみで可能でしょうか?
CC#.NET のみでは不可能である場合、他に必要なコンポーネント
 は何でしょうか?


1.可能です。
2.どんなに複雑であっても、所詮はエクセル。行と列でアクセス可能です。
3.いいえ。
4.収集するエクセルの、最上位バージョンが必要です。


 任意のシートや任意のセルにアクセスする方法は、「マクロ記録」を利用するとよいでしょう。ただし、この方法では「特定のシート、セル」になるので、適切に変更する必要があります。
 回答者により、任意の場所に任意の記入をされると、人間が目視で確認しなければならなくなります。機械的に判別できる「仕掛け」を作る必要があります。これは普通、「特定の列」であったり、「特定の文字列があるセルから特定できるセル」(「※」の右側など)であったります。
 「回答」と「質問」が結びつかなければ、アンケートになりえません。したがって、「質問」と「回答」が結びつけられるよう、回答者による「任意」は、大幅に制限する必要があると思います。。
めー
会議室デビュー日: 2004/07/26
投稿数: 9
投稿日時: 2004-07-26 08:54
めーと申します。

1ページのレイアウトが固定であるならば、ページの支点となるセルを求め、
その位置からの相対位置やセル範囲の命名で該当セルの値を
取得することができると思います。

また、ページが縦に複数回繰り返される場合でも、列が揃っているのであれば
縦方向にページの支点を検索することで、各ページを識別することができると
思います。(1シートの行はたかだか65000行程度なので)

Excelの操作については、Microsoft Excel Object LibraryのCOMを
使用することで、値の取得に限定すればVBAと同じように扱うことができると
思います。(それ以上の操作はわかりませんが)
Microsoft Excel Object Libraryについては以下を参照ください。

http://backno.mag2.com/reader/BackBody?id=200407150800000000069455000
http://backno.mag2.com/reader/BackBody?id=200407220800000000069455000

LOBO
会議室デビュー日: 2004/07/22
投稿数: 11
お住まい・勤務地: 愛知
投稿日時: 2004-08-02 13:00
Jitta 様
めー様

ご返信ありがとうございます。
ご提案いただいた手法や留意点、またキーワード共に大いに参考に
させて頂きました。

ただ、蛇足ではあるのですが…結局、ワークシート数は固定となり、
ワークシート毎に全ての項目範囲(A1:X65535)を命名して Data-
Set として取得して、プログラムで解析することとなりました。

返信が遅くなりましてすみません。
今後ともよろしくお願いします。
1

スキルアップ/キャリアアップ(JOB@IT)