2017-09-05 26 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 
相关问题