我正在编写一个在Excel电子表格中汇总SQL Server性能信息的工具。其中一些信息包括SQL Server执行计划,这些计划可以用XML编码。(这称为"showplan XML“。)SQL Server Management Studio可以识别包含这些XML文档的文件,并可以图形方式显示这些文件。我的问题是,是否可以在Excel中创建一个超链接单元格,以便在Management Studio中打开一个计划。
我以前从来没有做过这样的事情。(我的背景是编写Unix系统软件。)看起来DDE (动态数据交换)协议可以解决这个问题,所以这就是我目前正在研究的方法。
发布于 2017-09-23 04:07:40
一旦我想好了怎么做,这就变得非常简单了。我使用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文件的副本现在是工作簿的一部分。)
这可能是Martin Smith在上面的评论中提出的建议,但当时我理解他的意思是,.sqlplan文件将作为普通文件存储在工作簿之外。还请注意,这可能适用于任何类型的文件,您想要嵌入到电子表格中!
我之所以不在创建时设置大小和位置,是因为在创建时,您只能将其设置为正方形。我遵循上面的代码,让"link“填充它所在的单元格:
$object.ShapeRange.LockAspectRatio = $false
$cell = $range.Cells($cellRow, $cellColumn)
$object.Left = $cell.Left
$object.Width = $cell.Width
$object.Height = $cell.Height
$object.Top = $cell.Tophttps://stackoverflow.com/questions/46062764
复制相似问题