0

Excelで何かを選択すると、Excel :: Application::Selectionプロパティに選択したオブジェクトが含まれます。たとえば、セルを選択した場合、次を使用してそれらをExcel::Rangeに簡単にキャストできます。

Excel.Range cells = Excel.Application.Selection as Excel.Range

ここで、Excel = Microsoft.Office.Interop.Excel

いくつかの画像を選択したら、それをExcel :: Pictureにキャストし、次にExcel :: Shapeにキャストする必要がありますが、一部の形状の場合は、楕円形、長方形など、形状ごとに異なるインターフェイスがあるようです。すべてを削除する必要があります。ワークシートでが選択されています。そのセルの場合、コンテンツはクリアされ、Picture、Shape、またはOLEObjectは削除されますが、問題は、すべてのインターフェイスをチェックしたくないということです。

if (null != ThisApplication.Selection as Excel.Shape)
    (ThisApplication.Selection as Excel.Shape).Delete();
else if (null != ThisApplication.Selection as Excel.Picture)
    (ThisApplication.Selection as Excel.Picture).Delete();
else if (null != ThisApplication.Selection as Excel.OLEObject)
    (ThisApplication.Selection as Excel.OLEObject).Delete();

すべてのShapes/Picturesをキャストして、それらに対してdeleteを呼び出すことができるベースインターフェイスが1つだけあればいいのにと思います。

取得することは可能ですか:

  1. Application::Selection内の実際のタイプ-System::COMObjectは表示されますが、実際のタイプに関する情報は表示されません
  2. どういうわけか、Selectionに画像/形状などが含まれていることを識別し、基になるタイプで「Delete」メソッドを呼び出します
4

1 に答える 1

1

これが私の問題を解決した方法です。答えは、VBAで遅延バインディングを使用することです。Application.Run(...)メソッドを使用して、C#アドイン内からVBAマクロを呼び出します。VBAマクロは、次のコードを実行するだけです。

Application.Selection.Delete  

そして、VBAはそれがどんな形であれDeleteメソッドを呼び出します。

于 2011-10-02T08:46:45.127 に答える