- PR -

VC2005 Excel操作について

投稿者投稿内容
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-06-08 11:47
引用:

kenさんの書き込み (2006-06-08 11:42) より:

UsedRangeとRangeは、どのように違うのでしょうか?


インスタンスの型は、どちらも Excel::Range^ ですが、
UsedRange は、セルの指定ができませんよね。
つまり、「どこからどこまで」 という範囲の保証がないですよね。

引用:

こちらで、試してみようかと思います。


むしろ、こちらでないとできません。(;^-^)
COM 参照の解放にだけは気をつけてください。
(コードが出ていないので、このあたりの実装はわかりませんけど)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ken
大ベテラン
会議室デビュー日: 2006/03/29
投稿数: 121
お住まい・勤務地: 東京
投稿日時: 2006-06-08 12:06
じゃんぬねっとさん
レスありがとうございます。
もう少し突っ込んで、聞いてしまいます。

[/quote]
インスタンスの型は、どちらも Excel::Range^ ですが、
UsedRange は、セルの指定ができませんよね。
つまり、「どこからどこまで」 という範囲の保証がないですよね。
[quote]

Excel::Worksheet^ sheet = (Excel::Worksheet^)xlWorkbook->ActiveSheet;
sheet->Cells[2,1] = "test";         ← セルに記述されます。
sheet->UsedRange->Borders->LineStyle = 1; ← 同様にセルに対して、線が引けます。。

↑上記の場合、Cells[2,1]に線を引くことが出来ます。
エラーにならないから、良いというわけではないですが、
引用の部分で、セルの指定が出来ませんとありますが、
これは、セルの指定が出来てないのでしょうか??



引用:

むしろ、こちらでないとできません。(;^-^)
COM 参照の解放にだけは気をつけてください。
(コードが出ていないので、このあたりの実装はわかりませんけど)


解放というのは、
ReleaseComObjectを使えば良いのですよね?
こちらを使用しています。

[ メッセージ編集済み 編集者: ken 編集日時 2006-06-08 12:07 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-06-08 12:35
引用:

kenさんの書き込み (2006-06-08 12:06) より:

上記の場合、Cells[2,1]に線を引くことが出来ます。
エラーにならないから、良いというわけではないですが、
引用の部分で、セルの指定が出来ませんとありますが、
これは、セルの指定が出来てないのでしょうか??


そう来ましたか。(;^-^)
そういう使い方をすれば、指定が出来ていることになるでしょうね。(少々、危険ですが)
しかし、これですと、Cells[2, 1] で取得した Excel::Range^ を何故使わないのですか?
という疑問の方が大きくなってしまいます。

それと、疑問だけでなく、

引用:

sheet->UsedRange->Borders->LineStyle = 1;


このような書き方では、

引用:

解放というのは、ReleaseComObjectを使えば良いのですよね?


ReleaseComObject では、解放できていないものが多数あることになります。

# 本題の方は、私の言ったとおりの方法で実装できたのでしょうか... 気になります。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2006-06-08 12:59
引用:

VBAは、使った事がありません。。
引用:

何か、いいサンプル、サイトがあれば教えてください。



仕様経験が無くたって、見りゃ、雰囲気くらいはつかめます。
何も無いよりはナンボかましです。

Excel や Office アプリケーションの操作を行うサンプルは、VBA, VB のコードが主流なので、好き嫌いせずに読んでみることを勧めます。

Excel の操作部分に関して、C++/CLI で気張って COM interop するより、ネイティブコードでオートメーションした方が面倒が少ないと思うんですが、C++/CLI で書かなければならない特別な理由でもあるんでしょうか?




Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2006-06-08 13:25
引用:

渋木宏明(ひどり)さんの書き込み (2006-06-08 12:59) より:
Excel の操作部分に関して、C++/CLI で気張って COM interop するより、ネイティブコードでオートメーションした方が面倒が少ないと思うんですが、C++/CLI で書かなければならない特別な理由でもあるんでしょうか?


私もこれ思いました。C++/CLIはネイティブコードが書けるので、.NET用のCOMの使い方
(COM interopってよぶんですか?)はあまりすることはないかなぁと思っています。

[ メッセージ編集済み 編集者: Blue 編集日時 2006-06-08 13:26 ]
ken
大ベテラン
会議室デビュー日: 2006/03/29
投稿数: 121
お住まい・勤務地: 東京
投稿日時: 2006-06-08 13:34
じゃんぬねっとさん
レスありがとうございます。
引用:

そう来ましたか。(;^-^)
そういう使い方をすれば、指定が出来ていることになるでしょうね。(少々、危険ですが)
しかし、これですと、Cells[2, 1] で取得した Excel::Range^ を何故使わないのですか?
という疑問の方が大きくなってしまいます。

それと、疑問だけでなく、

sheet->UsedRange->Borders->LineStyle = 1;

このような書き方では、
解放というのは、ReleaseComObjectを使えば良いのですよね?
ReleaseComObject では、解放できていないものが多数あることになります。
# 本題の方は、私の言ったとおりの方法で実装できたのでしょうか... 気になります。


じゃんぬねっとさんの説明で、下記のようなしたら出来たのですが、

>これですと、Cells[2, 1] で取得した Excel::Range^ を何故使わないのですか?
知識が無かったので、じゃんぬねっとさんの指摘で気が付きました。

sheet->Range["B2", "B2"]->Borders[Excel:lBordersIndex:lEdgeTop]->LineStyle = Excel:lLineStyle:lDouble;

こちらは、危険にあたるのでしょうか?
色々な、意見があるのかと思いますが、
参考に出来たらと思います。
それとも、先ほど説明していただいた、
通りにやったほうが良いのでしょうか?

解放については、
上記のように線を書いた場合何に対して
何を行えばよいのでしょうか良いのでしょうか?
System::Runtime::InteropServices::Marshal::ReleaseComObject(xlWorkbooks);
System::Runtime::InteropServices::Marshal::ReleaseComObject(xlApplication);
の事ではなのですね。。

ご説明御願いいたします。

[ メッセージ編集済み 編集者: ken 編集日時 2006-06-08 13:35 ]
ken
大ベテラン
会議室デビュー日: 2006/03/29
投稿数: 121
お住まい・勤務地: 東京
投稿日時: 2006-06-08 13:45
渋木宏明(ひどり)さん、Blueさん
レスありがとうございます。

引用:

仕様経験が無くたって、見りゃ、雰囲気くらいはつかめます。
何も無いよりはナンボかましです。

Excel や Office アプリケーションの操作を行うサンプルは、VBA, VB のコードが主流なので、好き嫌いせずに読んでみることを勧めます。

Excel の操作部分に関して、C++/CLI で気張って COM interop するより、ネイティブコードでオートメーションした方が面倒が少ないと思うんですが、C++/CLI で書かなければならない特別な理由でもあるんでしょうか?


C言語で、作成したかったので、
こちらを選択しました。
ネイティブコードでオートメーション??
これは、どうゆう事なのでしょうか?
勉強してみます。

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