DOBON.NET DOBON.NETプログラミング掲示板過去ログ

C#でのエクセル操作方法

環境/言語:[WinXP,C#,.NETFramework1.1,EXCEL2003]
分類:[.NET]

なにぶん初心者なのでよろしくお願いします。

C#でExcelの複数のsheetを選択するにはどうしたらよいでしょうか?
たとえばVBAなら Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select で
sheet1~3を選択できますが、
これをC#で行うにはどのようなコードを書けばよいでしょうか?
単一の選択方法は
((Excel.Worksheet)ThisApplication.ActiveWorkbook.Sheets[1]).Select(
Type.Missing);
で出来るのですが・・・
基本的な質問で申し訳ないのですがよろしくお願いします。

VS.NET2003, EXCEL 2003です
rinさん、こんばんは。深山と申します。

 Excel2003 でも同じかどうか判りませんけど、 Excel2000 では
> 選択位置を指定したオブジェクトのみを選択するには、True を指定します。
> 既に選択されていたオブジェクトと指定したオブジェクトを選択するには、False を指定します。
とヘルプに書かれてました。< Worksheet.Select メソッド
# 何故か Excel2002 のヘルプだと引数の(上記 True / False のような)具体的な説明がないような?

 ですので、

((Excel.Worksheet)ThisApplication.ActiveWorkbook.Sheets[1]).Select(true);
((Excel.Worksheet)ThisApplication.ActiveWorkbook.Sheets[2]).Select(false);
((Excel.Worksheet)ThisApplication.ActiveWorkbook.Sheets[3]).Select(false);

のようにすれば複数選択できるのではないかと思います。
# ただ、実際に試したことはないので的外れでしたら申し訳ありません(^_^;)


※直接関係ないのですが
http://support.microsoft.com/default.aspx?scid=kb;ja;317109
のような問題もあるそうです。もしご存知なければ一度ご確認くださいませ。
深山様ご返信ありがとうございます。
早速試してみたところ、
((Excel.Worksheet)book.Sheets[1]).Select(true);
((Excel.Worksheet)book.Sheets[2]).Select(true);
((Excel.Worksheet)book.Sheets[3]).Select(true);
のだと、1から3まで複数選択されず、ひとつずつSheetが切り替わって選択されてしまいました。


> # 何故か Excel2002 のヘルプだと引数の(上記 True / False のような)具体的な説明がないような?
私なりに調べたのですが深山さんのおっしゃるとおり、何せ説明不足なもので悪戦苦闘しています。

実際はSheet1から3を選択して印刷プレビューを表示したいのです。

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

> ※直接関係ないのですが
> http://support.microsoft.com/default.aspx?scid=kb;ja;317109
> のような問題もあるそうです。もしご存知なければ一度ご確認くださいませ。
この問題についてはいろいろ調べて、このような感じで解決しました。

book.Application.DisplayAlerts = false;
book.Application.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(xl);

わざわざご報告ありがとうございます。
rinさん、こんにちは。

> 早速試してみたところ、
> ((Excel.Worksheet)book.Sheets[1]).Select(true);
> ((Excel.Worksheet)book.Sheets[2]).Select(true);
> ((Excel.Worksheet)book.Sheets[3]).Select(true);
> のだと、1から3まで複数選択されず、ひとつずつSheetが切り替わって選択されてしまいました。

 えっと、すいません。紛らわしい書き方をしてしまったようですね。先の例では引数を

true
false
false

としてたのですけども(^_^;)

 引数に true  を指定すると、そのシートのみが選択されます。
 引数に false を指定すると、これまで選択されてたシートと合わせて選択されます。

‥‥ということで。繰り返しになりますがこんな感じです。
 今度はちゃんと動作確認しましたので大丈夫かと。
# とはいえ、私の試した環境は Excel 2000 (Microsoft Excel 9.0 Object Library)ですが(汗)

    Excel.Sheets sheets = book.Worksheets;
    Excel.Worksheet sheet1 = (Excel.Worksheet)sheets["Sheet1"];
    Excel.Worksheet sheet2 = (Excel.Worksheet)sheets["Sheet2"];
    Excel.Worksheet sheet3 = (Excel.Worksheet)sheets["Sheet3"];
    sheet1.Select(true);    // Sheet1 に選択が切り替わる
    sheet2.Select(false);   // Sheet1 / Sheet2 が選択される
    sheet3.Select(false);   // Sheet1 / Sheet2 / Sheet3 が選択される


 また、最初にrinさんがおっしゃってたような方法で選択を行うこともできるようです。
> たとえばVBAなら Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select で 
> sheet1~3を選択できますが、

    Excel.Sheets sheets = (Excel.Sheets)book.Worksheets[new string[] {"Sheet1", "Sheet2", "Sheet3"}];
    sheets.Select(Type.Missing);

# こちらは見たままですね。

 ご確認くださいませ。
深山ご返信ありがとうございます。
見事希望とおりの動作が実現できました!
本当にありがとうございました。

これで一歩前進しました。
また何かありましたらよろしくお願いいたします
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板