2017-09-05 5 views
0

J'écris un outil qui résume les informations de performance SQL Server dans une feuille de calcul Excel. Certaines de ces informations incluent des plans d'exécution SQL Server, qui peuvent être codés en XML. (Ceci est appelé "showplan XML".) SQL Server Management Studio reconnaît les fichiers contenant ces documents XML et peut les afficher graphiquement. Ma question est de savoir s'il est possible de créer une cellule hypertexte dans Excel qui ouvre un plan dans Management Studio.Lien XML Showplan dans la feuille de calcul Excel?

Je n'ai jamais fait ce genre de chose auparavant. (Mon expérience est dans l'écriture d'un logiciel système Unix.) Il semble que le protocole DDE (Dynamic Data Exchange) puisse contenir la réponse, c'est donc l'approche que j'étudie actuellement.

+1

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. –

+0

J'espérais que le classeur Excel resterait autonome, mais, d'un autre côté, votre approche est quelque chose que je sais faire. –

Répondre

0

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 
    ) 

$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