2017-09-05 69 views
0

我正在寫一個彙總Excel電子表格中SQL Server性能信息的工具。其中一些信息包括SQL Server執行計劃,可以用XML編碼。 (這被稱爲「showplan XML」。)SQL Server Management Studio可識別包含這些XML文檔的文件,並以圖形方式顯示它們。我的問題是,是否可以在Excel中創建一個超鏈接的單元格,以便在Management Studio中打開一個計劃。在Excel工作表中顯示計劃XML鏈接?

我從來沒有做過這種事情。 (我的背景是編寫Unix系統軟件。)它看起來像DDE(動態數據交換)協議可以解決問題,所以這是我目前正在研究的方法。

+1

如果您創建的顯示計劃作爲單獨文件以'.sqlplan'擴展然後就超到它應該打開文件自動啓動默認應用程序。 –

+0

我一直希望保持Excel工作手冊的獨立性,但另一方面,您的方法是我知道該怎麼做的。 –

回答

0

一旦我想出如何去做,結果是非常簡單。我使用OLE嵌入代替DDE。嵌入將Excel工作簿變成類似於Unix tar文件或Windows zip文件的東西:您有一個文件包含其中的其他文件。

首先,我將XML文本寫入一個臨時文件,其擴展名爲.sqlplan。其次,我把這個代碼:

$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點到臨時文件。第三,我刪除了臨時文件。 (因爲「鏈接」參數是$false,所以XML文件的副本現在是工作簿的一部分。)

這可能是馬丁史密斯在上面提出的評論中提到的,但當時我明白他是稱.sqlplan文件將作爲普通文件存儲在工作簿之外。另請注意,這可能適用於任何想要嵌入電子表格的文件!

我沒有在創建時設置大小和位置的原因是因爲在這一點上你不能使其成爲正方形。我按照上面的代碼這一點,使「鏈接」填充單元格是在:

$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 
相關問題