QA@IT
この質問・回答は、@ITの旧掲示板からインポートされたものです。

Excelで既存のシートを同一Book内で新規コピーするには?

皆様の知恵を拝借させて頂きたく宜しくお願いします。

ご確認させて頂きたい内容は、件名に記載している通りで
、同一Book内で既に存在しているシートを新規でコピーす
る方法についてです。

VB6.0だと、以下で可能と思います。

-----------------------------------------------------------
Dim xlSheet1 As Excel.Worksheet
Dim xlSheet2 As Excel.Worksheet

'現在アクティブなシートを新規コピー
xlSheet1.Copy After:=xlSheet1

'Sheet1のシート名を"新規ワークシート"という名前に変更
xlBook.ActiveSheet.Name = "新規ワークシート"

'インスタンス設定(?)
Set xlSheet2 = xlBook.Worksheets(2)

'指定したセルにデータを設定
xlSheet2.Cells(2, 1) = "これは試験です。"
-----------------------------------------------------------

上記のようなことをC#でも実現したいのですが、可能なのでしょうか?
異なるBook間におけるシートコピーは分かるのですが、上記について
どうしても分かりません。

どうか宜しくお願い致します。

質問者:未記入

回答

以下は、誤りでした。

'Sheet1のシート名を"新規ワークシート"という名前に変更

以下に訂正いたします。

'Sheet2のシート名を"新規ワークシート"という名前に変更

投稿者:未記入

編集 履歴 (0)

http://www.microsoft.com/japan/msdn/officedev/vsto2003/ExcelObj.asp
に方法として、以下が記載されておりました。

((Excel.Worksheet)ThisWorkbook.Sheets[1]).Copy(Type.Missing,
ThisWorkbook.Sheets[3]);

また、上記を以下に書き換えて、実行したところ問題なく実行されました。

((Excel.Worksheet)oWB.Sheets[1]).Copy(Type.Missing, oWB.Sheets[2]);

ありがとうございました。

投稿者:未記入

編集 履歴 (0)

ue大ベテラン様

早速のアドバイスの程、ありがとうございました。
当方で解決策を記載した後で、スレッドを参照したところ、
ue大ベテラン様の記載を確認いたしました。

方法としては、同じと認識しました。

ありがとうございました。

投稿者:未記入

編集 履歴 (0)

未記入さんの書き込み (2006-06-15 17:57) より:

また、上記を以下に書き換えて、実行したところ問題なく実行されました。

((Excel.Worksheet)oWB.Sheets[1]).Copy(Type.Missing, oWB.Sheets[2]);

ありがとうございました。

VSTO を使っているわけじゃないのですよね。

「Microsoft Excel xx.x Object Library」 を使っているのだとしたら、
この記述では 「メモリリーク」 を起こしますから、アウトですね。

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

投稿者:じゃんぬねっと

編集 履歴 (0)

じゃんぬねっと様

ご指摘をありがとうございます。

「Microsoft Excel xx.x Object Library」 を使用しているので、
アウトですね。。。

当方の勉強が足りないですね。
VSTOを利用する場合ですので、ueベテラン様が紹介してくれたサイト
の情報を良く観察したいと思います。

すいません、ありがとうございました。

投稿者:未記入

編集 履歴 (0)

未記入さんの書き込み (2006-06-15 18:18) より:

当方の勉強が足りないですね。

VSTOを利用する場合ですので、ueベテラン様が紹介してくれたサイトの情報を良く観察したいと思います。

VSTO は VSTO ですから、いくら情報を眺めても、解決にはならないと思います。
これから、VSTO で開発するというのであれば別ですが...

COM オブジェクトを扱う場合は、'参照カウント' をデクリメントする必要があります。

  COM オブジェクトを解放する




    ((Excel.Worksheet)oWB.Sheets[1]).Copy(Type.Missing, oWB.Sheets[2]);

このコードには、暗黙の参照が、いくつかあります。

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

投稿者:じゃんぬねっと

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。