我正在编写一个工具,在Excel电子表格中汇总SQL Server性能信息。其中一些信息包括SQL Server执行计划,可以用XML编码。 (这被称为“showplan XML”。)SQL Server Management Studio识别包含这些XML文档的文件,并以图形方式显示它们。我的问题是,是否可以在Excel中创建一个在Management Studio中打开计划的超链接单元格。
我以前从未做过这种事。 (我的背景是编写Unix系统软件。)看起来DDE(动态数据交换)协议可以得到答案,这就是我目前正在研究的方法。
答案 0 :(得分: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
指向临时文件的位置。第三,我删除了临时文件。 (因为" Link"参数是$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