@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

セル指定し中に入ってるデータを抽出する方法。

投稿者投稿内容
オウドー
ベテラン
会議室デビュー日: 2007/06/05
投稿数: 59
投稿日時: 2007-06-05 12:31
はじめまして。皆様お世話になっております。
早速ですが質問をさせていただきます。

参照元記事URLにてC#でExcelを扱う方法を一通り見ましたが理解できませんでした。
Applicationクラスのインスタンスを作成しメソッドを用いて処理を行わせるのかな?
今現在、私が理解しているのは、Excelオブジェクトを確立し確立されたオブジェクトを
C#でいじる。ぐらいかな。

何を使えばいいかは見当がつくのですが使い方がいまいちわからないです。
以前は、xlsをcsvに変換しそれをデータセットの中に入れてってゆう方法を試しましたが文字化けしてだめでした。(理由はExcelフォーマットで複雑な関数が使われていたためです。)

遅くなりましたが今回この件を使う目的は、現行システム(勤怠システム(Excel))のデータを現在作成しているシステムにいれ有休計算、残業時間計算などに使うためです。

みなさまよろしくお願いします。
オウドー
ベテラン
会議室デビュー日: 2007/06/05
投稿数: 59
投稿日時: 2007-06-05 12:33
追記

参照設定などは設定済みです。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-06-05 12:41
引用:

オウドーさんの書き込み (2007-06-05 12:31) より:
はじめまして。皆様お世話になっております。
早速ですが質問をさせていただきます。

参照元記事URLにてC#でExcelを扱う方法を一通り見ましたが理解できませんでした。
Applicationクラスのインスタンスを作成しメソッドを用いて処理を行わせるのかな?
今現在、私が理解しているのは、Excelオブジェクトを確立し確立されたオブジェクトを
C#でいじる。ぐらいかな。

何を使えばいいかは見当がつくのですが使い方がいまいちわからないです。
以前は、xlsをcsvに変換しそれをデータセットの中に入れてってゆう方法を試しましたが文字化けしてだめでした。(理由はExcelフォーマットで複雑な関数が使われていたためです。)

遅くなりましたが今回この件を使う目的は、現行システム(勤怠システム(Excel))のデータを現在作成しているシステムにいれ有休計算、残業時間計算などに使うためです。

みなさまよろしくお願いします。


件名に書かれた内容の方が質問内容が明確ですね。(;^-^)

セルの位置を指定するには、Application > Workbooks > Workbook > Worksheets > Worksheet > Cells (Range) という順番で追っていく必要があります。実際に値を設定しているサンプル コードは過去ログ、または Google で検索しますと多くヒットしますのでそちらを参照してください。

実装する前に COM の参照カウントのデクリメントについても調べておいてください。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
オウドー
ベテラン
会議室デビュー日: 2007/06/05
投稿数: 59
投稿日時: 2007-06-05 12:49

[/quote]
件名に書かれた内容の方が質問内容が明確ですね。(;^-^)

セルの位置を指定するには、Application > Workbooks > Workbook > Worksheets > Worksheet > Cells (Range) という順番で追っていく必要があります。実際に値を設定しているサンプル コードは過去ログ、または Google で検索しますと多くヒットしますのでそちらを参照してください。

実装する前に COM の参照カウントのデクリメントについても調べておいてください。


[/quote]

じゃんぬねっとさんありがとうございます。
確かに件名が質問内容としては一番明確ですね。

>>実装する前に COM の参照カウントのデクリメントについても調べておいてください。

上記については、大丈夫(?)だと思います。メモリリークを防ぐ為の手段ですよね。

じゃんぬねっとさんありがとうございました。また判らない事があればこのトピックにて質問させていただきますのでその時はよろしくお願いいたします。

オウドー
ベテラン
会議室デビュー日: 2007/06/05
投稿数: 59
投稿日時: 2007-06-05 17:21
お久しぶりですorz

とりあえず、開放などは理解したつもりです。

今、現在つまづいてる部分はRangeでセルを指定して、テキストボックスに渡したら
System._Comobjectと表示されます。なぜでしょう。
先輩様に聞いたらもっと中身をみな!!っていわれました。
皆様のお力お貸しくださいませ。

[コード]
Excel.Application exapp = new Excel.Application();

Excel.Workbooks ks = exapp.Workbooks;
Excel.Workbook kd = ks.Open(n,Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);

Excel.Sheets ss = kd.Worksheets;

Excel.Worksheet st = (Excel.Worksheet)ss[1];
Excel.Range ge = st.Cells;
Excel.Range GEGE;
GEGE = ge.get_Range("A1", Type.Missing);


ks.Close();
exapp.Quit();
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-06-05 17:36
引用:

オウドーさんの書き込み (2007-06-05 17:21) より:

今、現在つまづいてる部分はRangeでセルを指定して、テキストボックスに渡したらSystem._Comobjectと表示されます。なぜでしょう。先輩様に聞いたらもっと中身をみな!!っていわれました。皆様のお力お貸しくださいませ。


その先輩の仰るとおり、「式ウォッチ」 などで Excel.Range オブジェクトの中身をご覧になればおわかりになるのではないかと思います。Excel.Range は、その名前どおりセルの Range であって、セルの中身そのものを表すわけではありません。

ただし、「式ウォッチで見る == 参照カウントが増える」 ということに留意した上で式ウォッチをご利用ください。まあ、デバッグを中止してプロセスを Kill してしまえば良いだけのお話ではありますが、稀に誤解して 「解放漏れ」 を疑われる方がいらっしゃいますので老婆心ながら書かせて頂きました。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
オウドー
ベテラン
会議室デビュー日: 2007/06/05
投稿数: 59
投稿日時: 2007-06-06 11:10
引用:

じゃんぬねっとさんの書き込み (2007-06-05 17:36) より:
その先輩の仰るとおり、「式ウォッチ」 などで Excel.Range オブジェクトの中身をご覧になればおわかりになるのではないかと思います。Excel.Range は、その名前どおりセルの Range であって、セルの中身そのものを表すわけではありません。

ただし、「式ウォッチで見る == 参照カウントが増える」 ということに留意した上で式ウォッチをご利用ください。まあ、デバッグを中止してプロセスを Kill してしまえば良いだけのお話ではありますが、稀に誤解して 「解放漏れ」 を疑われる方がいらっしゃいますので老婆心ながら書かせて頂きました。





皆様おはようございます。

昨日に引き続きExcelオブジェクトについて調べたんですが謎が多いです。
今現在困っているのは、Rangeクラスについてです。
昨日、じゃんぬ氏にお答えいただいた件は解決しました。
その件はありがとうございました。
さて、今回の件ですがデータセットにデータテーブルを作りましてその中に既存システムに入っているデータを挿入するってのが最大の目的です。
で、その為にExcelをC#でいじるべく色々挑戦しました。
そして、やっとこさRangeオブジェクトまでたどり着きました。
そこでなんですがRangeオブジェクトでセルの中の値をとることはできるんでしょうか。
範囲、参照などばかりでてきて取得というのがでてこないです。

よろしくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-06-06 11:53
引用:

オウドーさんの書き込み (2007-06-06 11:10) より:

昨日に引き続きExcelオブジェクトについて調べたんですが謎が多いです。今現在困っているのは、Rangeクラスについてです。昨日、じゃんぬ氏にお答えいただいた件は解決しました。その件はありがとうございました。さて、今回の件ですがデータセットにデータテーブルを作りましてその中に既存システムに入っているデータを挿入するってのが最大の目的です。で、その為にExcelをC#でいじるべく色々挑戦しました。そして、やっとこさRangeオブジェクトまでたどり着きました。そこでなんですがRangeオブジェクトでセルの中の値をとることはできるんでしょうか。


今回の問題と昨日の問題とで何か違いがあるでしょうか。昨日私が書かせて頂いた内容をそのままやっていれば解決できているハズです。

というより、昨日と全く同じ内容の質問 (変わらず件名どおりの質問) なのですから、昨日の問題は解決できていないと言えます。どのあたりが解決したと仰るのでしょうか? このあたりの前提が私とオウドーさんで違っている以上、私の回答が意図しないものになりかねません。

昨日書かせて頂いたように、

引用:

その先輩の仰るとおり、「式ウォッチ」 などで Excel.Range オブジェクトの中身をご覧になればおわかりになるのではないかと思います。Excel.Range は、その名前どおりセルの Range であって、セルの中身そのものを表すわけではありません。


式ウォッチ (または、オブジェクト ブラウザ、MSDN ライブラリ) をご覧になっていれば、どのメンバにセルの値が格納されているかわかると思います。

引用:

範囲、参照などばかりでてきて取得というのがでてこないです。


それほど情報は多くありませんが、普通に検索エンジンからヒットします。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

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