Excel Interop - Получение типа Excel :: Приложение :: Выбор - PullRequest
0 голосов
/ 14 декабря 2010

Когда что-то выбрано в 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();

Мне бы хотелось, чтобы был только один базовый интерфейс, к которому я мог бы привести все фигуры / рисунки и вызвать их удаление.

Можно ли получить:

  1. Реальный тип внутри Application :: Selection - он отображает System :: COMObject, но без информации о реальном типе
  2. Каким-то образом определить, что Selection содержит изображение / форму и т. Д., И вызвать метод «Delete» для базового типа

1 Ответ

1 голос
/ 02 октября 2011

Так я решил свою проблему. Ответ заключается в использовании позднего связывания в VBA. Мы вызываем макрос VBA из нашего надстройки C #, используя метод Application.Run (...). Макрос VBA просто выполняет следующий код:

Application.Selection.Delete  

и VBA вызывает метод Delete для любой формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...