如何获取工作表名称列表并在更改时自动更新?

时间:2019-06-27 20:44:39

标签: javascript google-apps-script google-sheets custom-function

我有一个很简单的问题:

我正在尝试检索文档中存在的所有图纸的名称,但是问题是它不会根据更改自动更新。我已经尝试在我的内部使用GoogleClock()函数,并且将触发器设置为时间驱动和事件驱动,但是它们都不适合我,我必须重写自定义函数以刷新数据,但是它不能解决任何问题。

function sheetNames() {
  var out = new Array()
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  for (var i=0 ; i<sheets.length ; i++) out.push( [ sheets[i].getName() ] )
  return out 
}

我会爱3000个可以帮助我的人。最好的问候!

P.D。我是javascript虚拟玩家

1 个答案:

答案 0 :(得分:0)

脚本逻辑:

    除非自变量更改,否则
  • 自定义函数不会更新。
  • 创建一个onChange触发器,以使用textFinder更改电子表格中所有自定义函数的所有参数

摘要:

/*@customfunction*/
function sheetNames(e) {
  return SpreadsheetApp.getActive()
    .getSheets()
    .map(function(sheet) {
      return sheet.getName();
    });
}

/*Create a installable trigger to listen to grid changes on the sheet*/
function onChange(e) {
  if (!/GRID/.test(e.changeType)) return; //Listen only to grid change
  SpreadsheetApp.getActive()
    .createTextFinder('=SHEETNAMES\\([^)]*\\)')
    .matchFormulaText(true)
    .matchCase(false)
    .useRegularExpression(true)
    .replaceAllWith(
      '=SHEETNAMES(' + (Math.floor(Math.random() * 500) + 1) + ')'
    );
}

阅读: