- PR -

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

1
投稿者投稿内容
未記入
会議室デビュー日: 2006/06/15
投稿数: 5
投稿日時: 2006-06-15 17:22
皆様の知恵を拝借させて頂きたく宜しくお願いします。

ご確認させて頂きたい内容は、件名に記載している通りで
、同一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間におけるシートコピーは分かるのですが、上記について
どうしても分かりません。

どうか宜しくお願い致します。
未記入
会議室デビュー日: 2006/06/15
投稿数: 5
投稿日時: 2006-06-15 17:24
以下は、誤りでした。

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

以下に訂正いたします。

'Sheet2のシート名を"新規ワークシート"という名前に変更
ue
ぬし
会議室デビュー日: 2005/05/07
投稿数: 581
お住まい・勤務地: 広島市
投稿日時: 2006-06-15 17:56
こんにちは。

VSTO で実現可能です。
Microsoft.Office.Tools.Excel.Worksheet クラスに Copy というメソッドがあります。
MSDN に使用例が載っています。

Worksheet.Copy メソッド
http://msdn2.microsoft.com/ja-jp/library/microsoft.office.tools.excel.worksheet.copy.aspx
未記入
会議室デビュー日: 2006/06/15
投稿数: 5
投稿日時: 2006-06-15 17:57
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]);

ありがとうございました。
未記入
会議室デビュー日: 2006/06/15
投稿数: 5
投稿日時: 2006-06-15 17:59
ue大ベテラン様

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

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

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

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

未記入さんの書き込み (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 の入門サイト
じゃんぬねっと日誌
未記入
会議室デビュー日: 2006/06/15
投稿数: 5
投稿日時: 2006-06-15 18:18
じゃんぬねっと様

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

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

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

すいません、ありがとうございました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-06-15 18:22
引用:

未記入さんの書き込み (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 の入門サイト
じゃんぬねっと日誌
1

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