带有超链接的单元格用 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 单击时实现重定向和数据复制。
下面的代码将 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 单击时实现重定向和数据复制。