工作中遇到excel有n多sheet,而excel的sheet浏览条比较短,能显示的sheet页面数目有限,不方便使用。
【需求】
在首页中生成目录,每个目录项对应一个sheet,点击可以跳转:
在每个sheet中有返回首页的超链接:
函数参数说明:内部跳转需要用SubAddress,外部跳转则用Address
Hyperlinks.Add(Anchor, Address, SubAddress, ScreenTip, TextToDisplay)
遇到sheet名中有#时,需要用单引号括起表名:
最新版如下:
;作者:sunwind
;版本:1.2
;时间:2017年10月23日14:55:35
;功能:为excel生成超链接目录(在首页点击某位置后运行本脚本)
;说明:将多个sheet的名称作为目录项,点击目录项可以跳转到对应的sheet上,在每个sheet上也生成返回首页的超链接。
; 1.0对于有#号的sheet名予以支持。
; 1.1首页的名称不限于“首页”
; 1.2在每个sheet增加一行写返回首页链接,以免覆盖原来的内容。
;最新版本发布地址:http://blog.csdn.net/liuyukuan/article/details/78314237
oExcel := ComObjActive("Excel.Application")
offset:=oExcel.ActiveCell.row()
addr:=oExcel.ActiveCell.address(,0) ;column() 获取列名字
StringSplit,addr,addr,$
;~ MsgBox % oExcel.ActiveSheet.Name
oExcel.ActiveCell.value:="[目录]"
for Sheet in oExcel.Sheets
{
;目录项目中不含“首页”
if (Sheet.name=oExcel.ActiveSheet.Name)
continue
;用Hyperlinks函数生成目录项
;Hyperlinks.Add(Anchor, Address, SubAddress, ScreenTip, TextToDisplay)
oExcel.ActiveSheet.Hyperlinks.Add(oExcel.ActiveCell.Offset(A_Index,0),"","'" Sheet.name "'!A1","Click here to see " Sheet.name,Sheet.name)
;每个sheet增加返回目录的超链接
oExcel.Sheets(A_index).Rows("1:1").EntireRow.Insert
Sheet.Hyperlinks.Add(oExcel.Sheets(A_index).cells(1,1),"",oExcel.ActiveSheet.Name "!" addr1 A_Index+offset,"Click here to see" oExcel.ActiveSheet.Name,"返回首页")
}