Когда что-то выбрано в Excel, свойство Excel :: Application :: Selection содержит выбранный объект. Например, если я выберу некоторую ячейку, я могу легко привести их к Excel :: Range, используя:
Excel.Range cells = Excel.Application.Selection as Excel.Range
Где Excel = Microsoft.Office.Interop.Excel
Теперь, когда выбрано какое-то изображение, я должен привести его к Excel :: Picture, затем к Excel :: Shape в случае некоторых фигур, но кажется, что есть разные интерфейсы для каждой фигуры, такие как Oval, Rectangle и т. Д. Мне нужно удалить любую вещь, выбранную на листе. Если это ячейка, то содержимое будет очищено, 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();
Мне бы хотелось, чтобы был только один базовый интерфейс, к которому я мог бы привести все фигуры / рисунки и вызвать их удаление.
Можно ли получить:
- Реальный тип внутри Application :: Selection - он отображает System :: COMObject, но без информации о реальном типе
- Каким-то образом определить, что Selection содержит изображение / форму и т. Д., И вызвать метод «Delete» для базового типа