Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.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 Google应用程序脚本函数getActiveSheet()不返回活动工作表_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script Google应用程序脚本函数getActiveSheet()不返回活动工作表

Google apps script Google应用程序脚本函数getActiveSheet()不返回活动工作表,google-apps-script,google-sheets,Google Apps Script,Google Sheets,: 电子表格中的活动工作表是显示在电子表格UI中的工作表 如果我有三张工作表,分别命名为Mary、Moe和Joe,并将Mary工作表保留在屏幕上(因此,它是活动工作表),然后运行以下简单脚本: function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet(); Logger.log(sheet.getName()); ss.setAct

:

电子表格中的活动工作表是显示在电子表格UI中的工作表

如果我有三张工作表,分别命名为Mary、Moe和Joe,并将Mary工作表保留在屏幕上(因此,它是活动工作表),然后运行以下简单脚本:

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  Logger.log(sheet.getName());

  ss.setActiveSheet(ss.getSheets()[2]);
  Logger.log(ss.getActiveSheet().getName());
}
我希望输出结果是

[18-10-26 18:41:45:724 EDT] Mary
[18-10-26 18:41:45:730 EDT] Joe
[18-10-26 18:50:51:930 EDT] Joe
[18-10-26 18:50:51:933 EDT] Joe
但事实上,它说:

[18-10-26 18:49:14:752 EDT] Moe
[18-10-26 18:49:14:755 EDT] Joe
如果我第二次运行它,而不接触纸张,我希望输出结果是

[18-10-26 18:41:45:724 EDT] Mary
[18-10-26 18:41:45:730 EDT] Joe
[18-10-26 18:50:51:930 EDT] Joe
[18-10-26 18:50:51:933 EDT] Joe
但它实际上说的和以前一样

[18-10-26 18:50:51:930 EDT] Moe
[18-10-26 18:50:51:933 EDT] Joe
换句话说,设置活动工作表确实会更改电子表格UI中显示的工作表,但似乎不会在内部将新工作表注册为活动工作表。GAS始终将Moe识别为活动板材,即使将活动板材设置为不同的板材

如果能给我一个解释和解决这个问题的方法,我将不胜感激。基本上,我只需要
getActiveSheet()
getActiveRange()
(有类似的问题)来提供当前在电子表格UI中可见的工作表,这与《开发人员指南》中的定义完全一致

编辑:我找到了这个问题的解决方案。我是从评论中引用自己的话

大家好,谢谢大家的意见。我刚刚发现 getActiveSheet()确实按照我希望的方式工作,但是 仅当通过使用构建的自定义菜单UI运行函数时 SpreadsheetApp.getUi().createMenu(…),它需要一个onOpen() 触发器(感谢@I'-'I的提示)。从 脚本编辑器导致了一些问题,这些问题启发了我的原始文章


然而,虽然我很高兴找到了一个解决方案,但它更像是一个解决核心问题的方法。我觉得在这两种情况下,
getActiveSheet()
都应该按照《开发人员指南》中的定义在菜单UI和脚本编辑器中起作用。它在其中一个中工作,而在另一个中不工作是没有意义的。

显示所有工作表10秒钟

此脚本将在电子表格中的所有工作表中循环,一次激活一个工作表并显示大约10秒钟

function cycleThroughAllSheets() {
  var ss=SpreadsheetApp.getActive();
  var shA=ss.getSheets();
  var start=new Date();
  for(var i=0;i<shA.length;i++){
    shA[i].activate();
    SpreadsheetApp.flush();
    ss.toast('Active Sheet is ' + shA[i].getName());
    do{
      //nothing
    }while(new Date().valueOf()-start.valueOf()<10000);
    start=new Date();
  }
  ss.toast('End of Script.')
}
函数循环throughallsheets(){
var ss=SpreadsheetApp.getActive();
var shA=ss.getSheets();
var start=新日期();

对于(var i=0;我可以与ful access共享电子表格来尝试coe吗?我实际上创建了一份副本,因为我在帖子中使用的工作表包含与工作相关的机密信息…应该提前考虑。无论如何,这张新工作表的行为方式是相同的,除了我现在每次都会收到Joe Joe,无论哪张工作表在di上splay非常感谢您能告诉我您使用的是什么web浏览器吗?它适合我。嗨,JSmith,谢谢您的反馈。我正在使用Mozilla Firefox 63.0(Quantum)对于64位Windows 10,感谢您共享此代码。我自己尝试过,效果非常好。但是,这并不是我想要做的。我想使用函数getActiveSheet(),而不是在工作表中循环,我很失望地发现,在某些情况下,它并没有按照我预期的方式工作,除非我在某种程度上错了。我认为,如果你每次使用activate()方法之后都使用
SpreadsheetApp.flush()
的话,你的脚本就会工作。