04功能视图
这功能很是方便,但也有不足之处:
一是 “返回目录” 的按钮,不同的工作表都只能固定在一个单元格;
二是有些不需要建目录的工作表,比如隐藏的工作表,也会创建目录,会造成工作表引用无效;
三是只提供了工作表名称,没有链接工作表中的其他信息提供。
因此,使用下文的JS脚本来解决以上问题。
function 设置目录(){
/*********** 参数设置区 **********/
/* 默认工作表单链接元格 defcell_link,此单元格的内容会显示在目录里的第二列
默认‘返回目录’存放的单元格 defback_catalog */
const defcell_link = "A1"
const defback_catalog = "D1"
//设置自定义工作表单链接元格,此单元格的内容会显示在目录里的第二列
const linksetup = [
/*修改Sheetname, cell_link, back_catalog 双引号中的内容
sheetname 为工作表名称,必须与可见工作表名称一致
cell_link 为【sheetname工作表】内的链接单元格,此单元格内容会被提取到【目录工作表】的第二列
back_catalog 为【sheetname工作表】内存放‘返回目录’的单元格*/
{sheetname: "Sheet2", cell_link: "C1", back_catalog: "F1"},
{sheetname: "Sheet3", cell_link: "B1", back_catalog: "F1"},
//...,
]
//需要过滤不需要出现在目录中的工作表名 ,大小写敏感
const filtersh = [
"Sheet1",
//"Sheet2",
//"Sheet3",
//...
]
//目录所在Sheet的名字
const catalogname = "目录"
/*********** 参数设置区 结束 **********/
//目录区保留3行空白
//目录数据所在区域大小, A 和 B 两列,注:工作表最多有255个
const catalogsize = "A4:B259"
let shset = Application.Worksheets
let catalogsh= shset.Item(catalogname)
catalogsh.Range(catalogsize).ClearContents()
let rowindex = catalogsh.Range(catalogsize).Row
for (let cursh of shset){//从工作表集合中,循环获取一个工作表
if (cursh.Name == catalogname) { continue }//目录本身 跳过
if (cursh.Visible == false){ continue }//不可见工作表 跳过
if (filtersh.includes(cursh.Name)){ continue }//被过滤掉了
//找到当前工作表名称对应的设置
let cursetup = linksetup.find(e => e.sheetname === cursh.Name)
//找不到则默认设置
if (!cursetup){
cursetup = {sheetname: cursh.Name, cell_link: defcell_link, back_catalog: defback_catalog}
}
//定义超链接地址:指向目标工作表中的“返回目录”单元格
let linkaddress = "'" cursh.Name "'!" cursetup.back_catalog
//定义鼠标停留时提示文字
let showhint = "点击跳转到工作表:“" cursh.Name "”"
// 加入超链接到目录第一列
catalogsh.Hyperlinks.Add(catalogsh.Cells(rowindex,1), '' ,linkaddress , showhint, cursh.Name)
//定义超链接地址:指向目标工作表中“需要提取”的单元格
linkaddress = "'" cursh.Name "'!" cursetup.cell_link
//定义鼠标停留时提示文字
showhint = " -【" cursetup.cell_link "】单元格"
//目录第2列内容使用公式提取
catalogsh.Cells(rowindex,2).Formula = "=" linkaddress
//加入超链接到目录第二列
catalogsh.Hyperlinks.Add(catalogsh.Cells(rowindex,2), "", linkaddress , showhint, cursh.Name)
//在当前工作表中加入返回目录的超链接,指向目录中的行位置。
cursh.Hyperlinks.Add(cursh.Range(cursetup.back_catalog), "","'" catalogname "'!A" rowindex, "返回目录", "返回目录")
rowindex
}
}
在脚本的参数设置区,设置相关参数,具体参看脚本中的注释。
测试脚本:
新建一个WPS工作表文件,使用表格下面的新建工作表功能,新增四个工作表,并把第一个工作表重命名为“目录”。
05新增工作表
在Sheet1~Sheet4中的第一列输入下面的字符,用于测试。
Sheet1工作表的第一行输入:
sheet1的A标题 | sheet1的B标题 | sheet1的C标题 |
Sheet2、Sheet3、Sheet4工作表的第一行同样输入:
sheet2的A标题 | sheet2的B标题 | sheet2的C标题 |
sheet3的A标题 | sheet3的B标题 | sheet3的C标题 |
sheet4的A标题 | sheet4的B标题 | sheet4的C标题 |
06工作表Sheet1~4的标题设置
运行脚本后的结果:
目录生成1