Domanda

Quando si seleziona qualcosa in Excel, la proprietà di Excel :: :: Application selezione contiene l'oggetto selezionato. Per esempio se seleziono alcune cellule, posso facilmente le precipitava Excel :: Gamma utilizzando:

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

Dove Excel = Microsoft.Office.Interop.Excel

Ora, quando si seleziona una certa immagine, devo gettarlo ai Excel :: Immagine, quindi Excel :: Forma in caso di alcune forme, ma sembra che ci siano diverse interfacce per ogni forma come ovale, rettangolo ecc ho bisogno di eliminare qualunque cosa viene selezionata sul foglio di lavoro. Se la sua una cella, poi il contenuto verrà cancellata, un'immagine, una forma o OLEObject verranno eliminati ma il problema è che io non voglio controllare ogni interfaccia:

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();

Vorrei che se c'è una sola interfaccia di base a cui posso lanciare tutte le forme / Foto e chiamare delete su di loro.

E 'possibile ottenere:

  1. Il vero tipo all'interno Application :: Selection - visualizza uno System :: ComObject ma nessuna info sul tipo reale
  2. In qualche modo identificare che la selezione contiene un'immagine / etc forma e chiamare il metodo "Delete" del tipo di fondo
È stato utile?

Soluzione

Questo è come ho risolto il mio problema. La risposta è quella di utilizzare l'associazione tardiva in VBA. Chiamiamo una macro VBA dall'interno della nostra C # componente aggiuntivo utilizzando il metodo Application.Run (...). La macro VBA solo esegue il seguente codice:

Application.Selection.Delete  

e VBA chiama il metodo Delete su qualunque forma essa sia.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top