onOpen不能使用Google Script

时间:2018-02-15 13:24:27

标签: javascript google-apps-script

我正在尝试在电子表格打开时获取一段代码。我添加了onOpen脚本,将脚本触发器设置为“当电子表格打开时”,等待......没有任何反应。我做错了什么?

该脚本基本上根据单元格的值将一行从一个工作表复制到另一个工作表。我希望脚本只有当工作表

时才能将具有指定值的所有行复制到下一个工作表
function onOpen(){
 moveThisRow();
 }

function moveThisRow(){

 var sheetNameToWatch = "Sheet1";

  var columnNumberToWatch = 7; // column A = 1, B = 2, etc.
  var valueToWatch = "move it";
  var sheetNameToMoveTheRowTo = "Sheet2";

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getActiveCell();
  var fill = sheet.getActiveRange-2;


  if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatch) {

    var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
    var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange);
    sheet.deleteRow(range.getRow());
  }
}

帮助!

1 个答案:

答案 0 :(得分:1)

您的代码实际上正在运行。问题是if语句中的条件永远不会得到满足。我在您的代码中添加了一个else部分,其中包含一个警告,可以更轻松地显示此内容。

function onOpen(){
  moveThisRow();
 }

function moveThisRow(){

  var sheetNameToWatch = "Sheet1";

  var columnNumberToWatch = 7; // column A = 1, B = 2, etc.
  var valueToWatch = "move it";
  var sheetNameToMoveTheRowTo = "Sheet2";

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getActiveCell();
//  var fill = sheet.getActiveRange - 2;

  if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatch) {
    var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
    var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange);
    sheet.deleteRow(range.getRow());
    SpreadsheetApp.getUi().alert('Conditions are true')
  } else {
    SpreadsheetApp.getUi().alert('Conditions are false')
  }
}

如果您更新onOpen函数以创建包含以下代码的菜单,您可以看到,当您指定的条件实际得到满足时,代码就会执行您告诉它的操作。

function onOpen(){
  SpreadsheetApp.getUi().createMenu('Test')
      .addItem('Run', 'moveThisRow')
      .addToUi();
 }

此外,正如前面所指出的,您的fill变量是NaN,但这不会导致问题,因为它实际上并没有在代码中使用(我只是将其注释掉)。希望这有帮助!