超链接到Excel单元格

快速总结

我怎样才能创build一个超链接到Excel中的特定单元格,将从Firefox工作,或在JavaScript中实现相同的结果?

详细说明

我有一个用户input数据的Excel电子表格。 这个电子表格然后用于在SVG中生成一些图表。 这些图表显示在Firefox中(尽pipe如果别的东西可以更好地工作,可以将其更改为其他内容)。 我希望SVG图中的对象有超链接返回到生成这些对象的Excel单元格,以便更改图表背后的数据。

我已经看到有关超链接的build议,例如file:/// C:/path/to/workbook.xls#Sheet1!A57应该可以做到,但只能在IE或Office应用程序中使用。 尝试在Firefox或“开始” – >“运行”中使用这种超链接时,在上次closures工作簿时会打开最后一个活动单元格中的工作簿。

我只是使用IE浏览器非常高兴,当然IE浏览器不支持SVG,至less不是开箱即用的。

那么有没有办法形成一个超链接(或可能是一些JavaScript),将打开一个Excel工作簿与特定的工作表和单元格活动?

这就是你可以攻击这个问题的方法。

在窗体上embedded浏览器对象并导航到您生成的图表文件。

由于这是您的浏览器对象,因此您可以捕获用户单击SVG超链接时生成的导航事件。

parsing导航目标以获取单元格引用,例如“Sheet1!A57”,然后调用Application.Goto“Sheet1!A57”。

示例:将WebBrowser和CommandButton添加到用户窗体中,然后粘贴此代码。

Private Sub UserForm_Initialize() Me.WebBrowser1.Navigate2 "file:///C:\Test.svg" End Sub Private Sub CommandButton1_Click() Me.WebBrowser1.Navigate2 "workbook:Sheet1!A57" End Sub Private Sub WebBrowser1_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean) Dim pos As Integer pos = InStr(1, URL, "workbook:", vbTextCompare) If 1 <= pos Then Dim cref As String cref = Mid(URL, pos + Len("workbook:")) Application.Goto Range(cref) Cancel = True End If End Sub 

我已经使用不同的技术与FireFox一起工作了。 在我的情况下,Excel为GraphViz生成DOT,为FireFox生成.svg。

链接的技术有点不好,因为它需要很多小文件,但运行速度很快。 你需要select一个新的文件types,或劫持一个现有的很less使用的文件types,如.xyz。 您为svg中的每个单独节点或边缘编写一个文件,以便将其返回到Excel的其他单元格。 该文件的内容存储文件(工作簿)的名称,工作表和单元格引用。 我只是把自己的行。 您创build一个vbscript(.vbs)作为一个单独的脚本文件,这将是您的应用程序。 这个vbscript接受一个参数,这个参数是文件的名字,它做的是打开文件,读取工作簿名称和工作表名称以及其中的单元格引用,发送命令到excel来调出工作簿,工作表和单元格。 然后,您需要将您的vbscript应用程序与FireFox中的文件types(例如.xyz)关联起来。 使用工具 – >选项 – >应用程序。 这可能会非常棘手,因为您必须实际键入vbs文件的名称而不是浏览到它(您可以浏览到该文件夹​​,然后切换到input)! 节点和边缘链接可以通过.svg传递(在我的情况下通过DOT通过URL标签); svg中的链接应该使用file:///表单指向适当的本地生成文件(例如.xyz文件之一)。

然后当你点击.svg中的链接时,FireFox会以文件名作为参数启动本地vbscript作为应用程序。 vbscript读取文件的内容,findExcel,并发送命令来激活正确的位置。 毕竟,剧本可以带来优秀的前面。

这个vbscript代码将得到命令行参数:

arg = Wscript.Arguments(0)

这个vbs片段将findExcel的运行副本:

设置objExcel = GetObject(,“Excel.Application”)

使用这些命令来读取文件:

设置objFSO = CreateObject(“Scripting.FileSystemObject”)
wkbName = objFSO.ReadLine
wksName = objFSO.ReadLine

使用这些命令将消息发送到Excel:

objExcel.Visible = True
wkb = objExcel.Workbooks(wkbName)
wkb.Activate
wks = wkb.Worksheets(wksName)
wks.Activate
wks.Rows(的rowNum)。select

这个片段将带来优秀的前锋(testing胜7):

设置objWsh = CreateObject(“Wscript.Shell”)
objWsh.AppActivate objExcel.Name

(奇怪Wscript.Shell.AppActivate objExcel.Name不!