Excel工作表中的Showplan XML链接



我正在编写一个工具,该工具总结了Excel电子表格中的SQL Server性能信息。其中一些信息包括可以在XML中编码的SQL Server执行计划。(这称为" Showplan XML"。)SQL Server Management Studio识别包含这些XML文档的文件,并可以以图形方式显示它们。我的问题是,是否有可能在Excel中创建一个超链接的单元,以在管理工作室打开计划。

我以前从未做过这种事情。(我的背景是书写Unix系统软件。)看起来DDE(动态数据交换)协议可以保留答案,因此这是我目前正在研究的方法。

一旦我弄清楚如何做到这一点,这变得非常简单。我使用ole嵌入而不是DDE。嵌入将Excel Workbook变成类似于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文件的副本现在是工作簿的一部分。)

这可能是马丁·史密斯(Martin Smith)在上面的评论中提出的建议,但是当时我知道他说.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

最新更新