【问题标题】:.getSheets() function return the wrong sheet.getSheets() 函数返回错误的工作表
【发布时间】:2021-01-06 10:23:36
【问题描述】:

我有一个简单的电子表格,它只包含 2 张表格。我正在尝试根据第一个工作表中活动单元格的坐标选择第二个工作表中的一个单元格。

但我面临一个奇怪的问题。这是我的代码:

function Arrondis() {
  var firstSheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
  var cellRange = firstSheet.getCurrentCell();
  var selectedColumn = cellRange.getColumn();
  var selectedRow = cellRange.getRow();
  
  var secondSheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[1];
  var secondColumn = selectedColumn-1;
  var secondRow = selectedRow-26;

  Logger.log("FEUILLE 1 : "+firstSheet.getName());
  Logger.log("FEUILLE 2 : "+secondSheet.getName());
  Logger.log("ROW :"+selectedRow+" / COLUMN :"+selectedColumn+" / VALUE :"+cellRange.getValue());
  Logger.log("ROW :"+secondRow+"  COLUMN :"+secondColumn);
}

前 2 个 Logger 函数运行良好,并且都返回两个不同的名称。但是下一个 Logger 功能不起作用。它返回活动工作表中当前单元格的坐标。无论我从哪里调用它,我都希望它始终在我的第一张表中查找。我可以在代码开头添加一行来设置活动工作表,但这似乎太多了。

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    解决方案:

    由于您正在使用active 单元格,我认为获得inactive 表的active 单元格的唯一方法是制作inactiveactive

    function Arrondis() {
      
      const ss = SpreadsheetApp.getActive();
      const firstSheet = ss.getSheets()[0];
      ss.setActiveSheet(firstSheet);
      var cellRange = ss.getCurrentCell();
      
      var selectedColumn = cellRange.getColumn();
      var selectedRow = cellRange.getRow();
      
      var secondSheet = ss.getSheets()[1];
      var secondColumn = selectedColumn-1;
      var secondRow = selectedRow-26;
    
      Logger.log("FEUILLE 1 : "+firstSheet.getName());
      Logger.log("FEUILLE 2 : "+secondSheet.getName());
      Logger.log("ROW :"+selectedRow+" / COLUMN :"+selectedColumn+" / VALUE :"+cellRange.getValue());
      Logger.log("ROW :"+secondRow+"  COLUMN :"+secondColumn);
    }
    

    【讨论】:

    • 那行不通。当您触发 setActiveSheet 函数时,它还将 A1 设置为活动单元格
    • I want it to always look up in my FIRST sheet no matter where I'm calling it from。这就是脚本的作用。为了在第一张表中获得活动单元格,您需要激活第一张表。请注意,选定的单元格将是您在第一张表中看到的选定单元格。在您的情况下,您选择了 A1,这就是您获得 A1 的原因。 @Yuniru
    • 我尝试使用 .getSheetByName("NAME") 而不是 .getSheets()[i] ,但它也不起作用。我的意思是,如果它实际上总是在查看活动工作表,那么具有按名称选择工作表的功能有什么意义?
    • @Yuniru 这是一个有效点。不知道他们为什么这样做。你试过我的解决方案了吗?您可以通过其名称获取工作表,然后将其设置为活动状态,然后仅返回此单元格中选定的单元格。这是你能做到的唯一方法。或者,指定一个静态范围。例如firstSheet.getRange("B2")
    • 您的解决方案除了 setActiveSheet 同时重新加载页面和活动单元格外有效。我找到了一种解决方法,只需更改我使用电子表格的方式,以确保我的脚本只会从正确的工作表中执行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 2013-10-21
    相关资源
    最近更新 更多