带有超链接的单元格用 google sheets 中的相邻行数据填充目标 sheet(脚本)

Cells with a hyperlink to populate destination sheet with adjacent row data in google sheets (script)

下面的代码将 link 添加到 A 列的单元格中,单击此 link 时,会将用户带到另一个 sheet 中的单元格 E7。 现在设置了 links 的列也有两个相邻的列(B 和 F),当用户单击 link, 在特定行上。

function addHyperlink(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var dataRng = ss.getSheetByName("Painel de Embarques").getRange(27, 1, ss.getLastRow(), 4).getValues();
  var rngValues = [];//This is for getting only non-empty rows
  for (var n = 0; n<dataRng.length; n++){
    if (dataRng[n][1] != ''){
      rngValues.push(dataRng);
    }
  }
  var destSheet = ss.getSheetByName("Atualizar Embarque").getSheetId();
  for (var a = 1; a < rngValues.length; a++) {
    if (rngValues[a][1] != ''){
      const fat = rngValues[a][1];
      const stat = rngValues[a][5];
      ss.getSheetByName("Painel de Embarques").getRange(27,1,rngValues.length,1).setValue('=hyperlink("https:sheetLink/edit#gid='+destSheet+'&range=E7";"Editar")');
    }
  }
  
}

问题是: 当用户单击它时,脚本如何像下面这样填充目标单元格? 行数据列 B 将位于目标 sheet 的单元格 B19 中; 行数据列 F 将继续位于目标 sheet.

的单元格 E7 中

谢谢!

您可以使用新 onSelectionChange() trigger

实施解决方法

不是直截了当的,但是举个例子:

  • 如果您单击“Painel de Embarques”中值为“Editar”的单元格 - 您可以将相应的行号保存到 Script properties
  • 当您单击 link 时,您将被重定向到另一个单元格 - 这也会触发 onSelectionChange,您可以检索相应的事件范围作为事件对象
  • 现在,知道您已从“Painel de Embarques”中最后选定的单元格重定向到 E7 - 您可以从相应行检索数据并将其粘贴到“Atualizar Embarque”[=32] =]

示例脚本:

function onSelectionChange(e){
  if(e.range.getSheet().getName() == "Painel de Embarques" && e.range.getValue()== "Editar"){
    PropertiesService.getScriptProperties().setProperty("row", e.range.getRow());
  }else if(e.range.getSheet().getName() == "Atualizar Embarque" && e.range.getA1Notation() == "E7"){
    var row = Number(PropertiesService.getScriptProperties().getProperty("row"));
    if(row){
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var dataSheet = ss.getSheetByName("Painel de Embarques");
      var valueB = dataSheet.getRange(row, 2).getValue();
      var valueF =dataSheet.getRange(row, 6).getValue();
      var destSheet = ss.getSheetByName("Atualizar Embarque");
      destSheet.getRange("B19").setValue(valueB);
      destSheet.getRange("E7").setValue(valueF);
      Logger.log(e.range.getA1Notation());
      Logger.log(e.range.getSheet().getName());
      Logger.log(e.range.getValue());
    }
  }
}
  • 请注意,这种方法可能会导致不良行为,例如如果您手动单击进入 E7 而没有通过单击 hyperlink.
  • 进行重定向
  • 如果这不是您满意的解决方案 - 您应该考虑另一种方法,例如创建一个按钮并 assign a script
  • 在这种情况下,您可以在单击按钮而不是在 hyperlink 单击时实现重定向和数据复制。