- PR -

Excelのシートコピーでオートシェイプがコピーされない

1
投稿者投稿内容
セルカー
ベテラン
会議室デビュー日: 2004/04/08
投稿数: 70
投稿日時: 2007-12-13 16:08
VS.NET2005(C#)で開発をしております。

複数のExcelを一つのExcelにまとめるようなプログラムを作成しているのですが、シートをコピーした際に、セルの色や形などはちゃんとコピーされるのですが、
なぜかオートシェイプで作成した図形がコピーされません。

オートシェイプの図形をコピーするには特殊な操作が必要なのでしょうか?

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

セルカーさんの書き込み (2007-12-13 16:08) より:

複数のExcelを一つのExcelにまとめるようなプログラムを作成しているのですが、シートをコピーした際に、セルの色や形などはちゃんとコピーされるのですが、なぜかオートシェイプで作成した図形がコピーされません。オートシェイプの図形をコピーするには特殊な操作が必要なのでしょうか?


まずはどのような手段でどのようなコードを書いているのか提示して頂けませんか? Object Library による COM Interop か VSTO あたりならば答えられるかと思いますが、とりあえずコードが欲しいです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
セルカー
ベテラン
会議室デビュー日: 2004/04/08
投稿数: 70
投稿日時: 2007-12-13 18:11
ありがとうございます。

かいつまんでソースを貼り付けます

------------------------------------------------------------------

// 新しいブックにシートをコピーして保存する
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
// Excelアプリとブックのインスタンスを生成する
Excel.Application xlsApp = new Excel.Application();
Excel.Workbooks xlsBooks;

// Excelアプリを起動します
xlsApp.Visible = true;

// Bookを閉じる時、確認メッセージを表示させない
xlsApp.Application.DisplayAlerts = false;

// 新しいWorkBooksを取得する
xlsBooks = xlsApp.Workbooks;

// 新しいExcelブックを追加する
xlsBooks.Add(string.Empty);

// 新規Bookを取得する
Excel._Workbook bookNew = xlsBooks.get_Item(1);

// 新規Bookシートを全て取得
Excel.Sheets sheetsNew = bookNew.Worksheets;

// シートオブジェクト
Excel._Worksheet sheet;

// 処理対象となるをExcelブックを全て読み込み、シートを追加する
foreach (string strFileName in あるだけ)
{
// 既存のExcelブックを開く
xlsBooks.Open(strFileName, 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);

// Bookを取得する
Excel._Workbook book = xlsBooks.get_Item(2);

// シートを全て取得
Excel.Sheets sheets = book.Worksheets;

// シートがあるだけ処理を回す
for (int j = 1; j <= sheets.Count; ++j)
{
// シートを取得
sheet = (Excel._Worksheet)sheets.get_Item(j);

// シートをコピー
sheet.Copy(Type.Missing, sheetsNew.get_Item(sheetsNew.Count));
}

// 開いた既存のExcelブックを閉じる
book.Close(Type.Missing, Type.Missing, Type.Missing);

// COM オブジェクトの参照カウントを解放する
Marshal.ReleaseComObject(sheets);
Marshal.ReleaseComObject(book);
}

以下後処理
------------------------------------------------------------------

例外処理などは省いております。

宜しくお願いします。
1

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