【发布时间】:2020-09-27 15:57:58
【问题描述】:
我正在尝试向 Google 表格添加目录:只是想在文档中包含一个所有表格的列表,作为可点击的链接(获得 150 +床单。)
我让它工作了,但它比我想的要复杂,并且让我对 Google 表格中的自定义函数有疑问。
这就是我所拥有的,当然设置在Tools › Script editor:
/**
* Returns all the document's sheet IDs.
*
* @return
* @customfunction
*/
function tocid() {
var out = new Array()
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
for (var i=0 ; i<sheets.length ; i++)
out.push( [ sheets[i].getSheetId() ]
)
return out
}
/**
* Returns all the document's sheet names.
*
* @return
* @customfunction
*/
function toctitle() {
var out = new Array()
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
for (var i=0 ; i<sheets.length ; i++)
out.push( [ sheets[i].getSheetName() ]
)
return out
}
使用每个公式,我得到:
| Sheet_ID | Sheet_Title |
|------------|-------------------|
| 349319062 | Table of Contents |
| 1280378086 | many ou much |
| … | … |
然后我可以使用HYPERLINK 公式获取链接:=hyperlink(concatenate("#gid=",A2), B2)。
所以它起作用了。
但是,我尝试一次性完成所有操作,如下所示:
/**
* Returns a list of all the document's sheets as hyperlinks.
*
* @return
* @customfunction
*
* …unfortunately, can't use built-in functions inside of it, it seems. So instead of hyperlinks, it shows the formula for the hyperlinks.
*/
function toclink() {
var out = new Array()
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
for (var i=0 ; i<sheets.length ; i++)
out.push( [ "=HYPERLINK(\"#gid=" + sheets[i].getSheetId() + "\", \"" + sheets[i].getName() + "\")" ]
)
return out
}
但是,正如函数的代码 cmets 中所述,它不起作用。
我的问题是:
-
您不能在 Google 表格的自定义函数/Google Apps 脚本中使用内置函数这一事实是否真的在任何地方记录? (如果我知道的话,我会节省几个小时的生命。)
-
有什么方法可以让自定义函数返回可点击的超链接?
我怀疑使用 Range 可能会做到这一点,但我对它们并不满意(而且上述仍然有效的事实使其不那么激励学习)。有没有办法让自定义函数只计算取自另一列的公式?
注意:我不想使用宏。我想在插入新工作表时使用自动更新的解决方案。
我意识到这里有一个类似的问题,with a very useful answer。这并不能完全回答我的问题,但比我当前的解决方案更易于使用。
【问题讨论】:
标签: google-apps-script google-sheets custom-function google-sheets-custom-function