Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 在电子表格中的所有工作表上设置ActiveCell。谷歌应用程序脚本_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 在电子表格中的所有工作表上设置ActiveCell。谷歌应用程序脚本

Google apps script 在电子表格中的所有工作表上设置ActiveCell。谷歌应用程序脚本,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有一个谷歌电子表格,有多张表格。我希望将光标设置为所有选项卡的特定单元格onOpen。第一行的每个单元格表示一年中的一周,即从开始到结束的一年。我已经编写了一些代码,以便在打开第5行时预选该列(每年的一周) 目前,只有最后一张图纸选择了我想要的单元格。这是因为setActiveCell一次只能用于一个单元格。我还尝试了setActiveRange和setActiveSelection,但没有成功 几年前我发现了一个问题,但这个解决方案对我不起作用。也许从那时起情况有所改变 这是我的密码: fu

我有一个谷歌电子表格,有多张表格。我希望将光标设置为所有选项卡的特定单元格
onOpen
。第一行的每个单元格表示一年中的一周,即从开始到结束的一年。我已经编写了一些代码,以便在打开第5行时预选该列(每年的一周)

目前,只有最后一张图纸选择了我想要的单元格。这是因为
setActiveCell
一次只能用于一个单元格。我还尝试了
setActiveRange
setActiveSelection
,但没有成功

几年前我发现了一个问题,但这个解决方案对我不起作用。也许从那时起情况有所改变

这是我的密码:

function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  Date.prototype.getWeek = function() {
    var onejan = new Date(this.getFullYear(),0,1);
    return Math.ceil((((this - onejan) / 86400000) + onejan.getDay()+1)/7);
  }
  var now = new Date();
  var weekNum = now.getWeek(); 
  var sheets = ss.getSheets();
  for(var i = 0; i < sheets.length; i++) {
    var newRange = sheets[i].getRange(5,weekNum + 1);      
    sheets[i].setActiveCell(newRange);
  }
}

它还仅设置最后一张图纸

看起来,当您在图纸集合上循环时,需要调用:

function onOpen() {
  SpreadsheetApp.getActive().getSheets().forEach(function (s) {
    s.setActiveSelection("B4");
    SpreadsheetApp.flush(); // Force this update to happen
  });
}

我猜Apps脚本的执行引擎优化了对单个调用的写入,并且在单个调用中只能进行一个活动选择。调用flush强制每个工作表更新一个调用。

Oof,并使用。关于链接,您应该在这里包括该链接中编写的许多解决方案中的哪些。我猜您首先需要在每张工作表上调用
activate()
,然后
setActiveRange()
我更新了问题并修复了循环。我还没有机会看一下扩展内置部分。这些链接更值得注意-在这个绑定工作表脚本而不是导出库的情况下,冲突是不太可能的。实际上,我对第二块代码有一个意外的结果。第一个块weekNum是11(3月12日的一周),但在第二个块中,weekNum从0迭代到11。这可能是由这些原因引起的吗?我在第一个块中添加了flush(),效果很好。顺便说一句,这听起来像是一个新问题。我现在还不清楚你在说什么,不建议将这个问题改为问一个新的问题,或者就与在打开的所有工作表上设置活动单元格无关的代码部分寻求调试帮助。不幸的是,必须这样做。在没有其他代码的情况下,应用程序脚本将正确地保存这些“写入”直到结束。您可以使用类似于所描述的内容,以避免在激活特定工作表之前需要更改活动单元格。
function onOpen() {
  SpreadsheetApp.getActive().getSheets().forEach(function (s) {
    s.setActiveSelection("B4");
    SpreadsheetApp.flush(); // Force this update to happen
  });
}