Cela s'est avéré très simple une fois que j'ai compris comment le faire. Au lieu de DDE, j'ai utilisé l'incorporation OLE. L'incorporation transforme le classeur Excel en quelque chose de similaire à un fichier tar Unix ou un fichier zip Windows: vous avez un fichier qui contient d'autres fichiers à l'intérieur.
D'abord, j'écris le texte XML dans un fichier temporaire, avec une extension .sqlplan
. En second lieu, j'appelle ce code:
$object = $ws.OLEObjects().Add(
[System.Type]::missing, # ClassType
$path, # FileName
$false, # Link
$false, # DisplayAsIcon
[System.Type]::missing, # IconFileName
[System.Type]::missing, # IconIndex
[System.Type]::missing, # IconLabel
[System.Type]::missing, # Left
[System.Type]::missing, # Width
[System.Type]::missing, # Height
[System.Type]::missing # Top
)
Où $path
pointe vers le fichier temporaire. Troisièmement, je supprime le fichier temporaire. (Parce que le paramètre "Link" est $false
, une copie du fichier XML fait maintenant partie du classeur.)
C'est peut-être ce que Martin Smith suggérait avec son commentaire ci-dessus, mais à l'époque je l'ai compris comme étant disant que les fichiers .sqlplan
seraient stockés en dehors du classeur en tant que fichiers normaux. Notez également que cela fonctionnerait probablement avec n'importe quel type de fichier que vous souhaitez intégrer dans une feuille de calcul!
La raison pour laquelle je ne définis pas la taille et la position au moment de la création est que vous ne pouvez pas faire autre chose qu'un carré à ce moment-là. Je suis le code ci-dessus avec cela, pour faire le « lien » remplir la cellule, il est en:
$object.ShapeRange.LockAspectRatio = $false
$cell = $range.Cells($cellRow, $cellColumn)
$object.Left = $cell.Left
$object.Width = $cell.Width
$object.Height = $cell.Height
$object.Top = $cell.Top
Si vous créez le showplan sous forme de fichiers séparés avec une extension '.sqlplan' puis juste un lien hypertexte vers le fichier, il devrait ouvrir dans l'application par défaut automatiquement. –
J'espérais que le classeur Excel resterait autonome, mais, d'un autre côté, votre approche est quelque chose que je sais faire. –