Google App Script getActiveSheet 返回最左边的工作表,而不是活动工作表

foo*_*iey 1 google-sheets google-apps-script

我想这个问题与我当前的问题最相似。但基本上,我有一个谷歌表格文件,底部有几张表格。我希望用户在他们当时打开的任何工作表上执行此脚本。

就像根据文档所说的上一个问题一样,活动工作表是电子表格 UI 中显示的工作表。我认为这意味着如果我在另一个选项卡中打开谷歌工作表文件,则当前选择和我可以查看的工作表将成为活动工作表。

但是,返回的实际活动工作表始终是底部选项卡最左侧的工作表。我已经通过切换工作表的顺序来确认这一点。因此,无论我实际上在 UI 中打开并可见哪个工作表,它总是会获取最左边的工作表。这是获取它的行。

var Sheet = SpreadsheetApp.openById("redactedid").getActiveSheet()
Run Code Online (Sandbox Code Playgroud)

这是应用程序脚本的已知错误吗?或者文档有误?如果是,是否有解决方法可以获取 UI 中当前打开的工作表?我不希望任何人必须在代码中对工作表名称进行硬编码,因为文件不断变化并且不断添加工作表。

The*_*ter 5

笔记:

要使用getActiveSheet()或任何活动对象,调用

  • 脚本必须绑定到电子表格
  • 脚本函数应该从菜单、按钮或宏键盘快捷键调用,而不是从 web 应用程序或 API 调用(脚本编辑器也可以,但不是首选)。
  • 电子表格必须在用户界面/浏览器中打开/可见,最好在活动/当前选定的窗口中。
  • 之前所有对 get 对象的调用都必须使用active. 例如,要获得活动范围,您应该首先获得活动电子表格=>活动工作表=>活动范围(活动对象链)。如果任何调用不是针对活动对象的(例如,如果您在中间步骤中使用getSheetByName()而不是getActiveSheet()),则最终调用可能会默认为默认对象(第一张表 A1)。

解决方案:

  • 在这里,要获取Spreadsheet,请使用SpreadsheetApp.getActive()代替SpreadsheetApp.openById(),这样它将getActiveSheet()位于活动对象链下。

片段:

const sheet = SpreadsheetApp.getActive().getActiveSheet();
Run Code Online (Sandbox Code Playgroud)