繁体   English   中英

Google Scripts,如何将数据设置为具有变量名的工作表

[英]Google Scripts, how to set data into sheet with variable name

我的目标是将另一张纸上的单元格设置为特定值。 所需的工作表和单元格是可变的。 我已将所需行和所需工作表都存储在活动工作表上的 M 和 F 行中。

SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Navigation").getRange('B1').setValue("Test1");

上面的代码有效,将值“Test1”设置为导航表上的单元格 B1。

但是,由于工作表和单元格必须是基于存储在单元格内的数据的变量,所以我必须这样做:

function onEdit(e) {
  // Set a comment on the edited cell to indicate when it was changed.
  var sheet = SpreadsheetApp.getActiveSheet();
  var Range = e.range;
  var Row = e.getrange.rowStart;
  Logger.log(Row);
 
  if(range.getSheet().getSheetName() == "Summary"&& //Ensure trigger on single column in document
    e.range.columnStart == 10 &&  // This section works
    e.range.columnEnd == 10 &&
    e.range.rowStart >= 4 &&
    e.range.rowEnd <= 5000) {
    
        // range.setValue(Row);
        Range1 = sheet.getRange("M1:M100"); //Obtain the row for the desired cell (stored within cells in column M)
        var cell1 = Range1.getCell(Row,1);
        var Row_Value = cell1.getValue();
        // range.setValue(Row_Value);

        Range2 = sheet.getRange("F1:F100"); //Get the name of the desired  sheet (stored within cells in column F)
        var cell2 = Range2.getCell(Row,1);
        var Name_Value = cell2.getValue();
        // range.setValue(Name_Value);

        Range3 = sheet.getRange("A1:G200");  //Get the Cell Location as a range
        var cell3 = Range3.getCell(Row_Value,7);

        Range4 = sheet.getRange(cell3);
        SpreadsheetApp.getActiveSpreadsheet().getSheetByName(Name_Value).getRange(Row_Value).setValue("Test1"); //Set value to required range on required sheet.
    }
}

然而,这不起作用。 它应该做的是从列 M 中获取所需的行,并从列 F 中获取工作表名称,并使用它将“测试”写入该工作表上的该单元格。

我在调试期间确实收到错误

TypeError:无法读取未定义 onEdit 的属性“范围”

我将其归因于 function 需要一个范围 (e) 但在调试过程中没有给出这一事实。

如果有人可以帮助解决这个问题,那就太好了,因为我对 javascript 一无所知。 谢谢你-S

尝试这个:

function onEdit(e) {
  const sheet = e.range.getSheet();
  if (sheet.getName() !== 'Summary'
    || e.range.columnStart !== 10
    || e.range.rowStart < 4) {
    return;
  }
  const sheetName = sheet.getRange('F' + e.range.rowStart).getValue() || 'no sheet name';
  const columnLetter = sheet.getRange('G' + e.range.rowStart).getValue() || 'no column letter';
  const rowNumber = sheet.getRange('M' + e.range.rowStart).getValue() || NaN;
  const targetCell = e.source.getRange(sheetName + '!' + columnLetter + rowNumber);
  targetCell.setValue('testing...');
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM