Google Spreadsheets(应用程序脚本)将一行信息复制到另一个电子表格中

时间:2013-01-08 20:41:04

标签: google-apps-script google-sheets

如果在第5列中输入任何信息,我需要将该行数据复制到另一个电子表格中。我的函数中的第一个if()用于其他东西,当任何信息输入第4列时,它会对数据进行排序,这有效,但是我需要另一个if()才能工作,但它没有,我看过了其他问题,但我无法找到适用于我的情况的答案。

function onEdit(event) {
  var sheet=event.source.getActiveSheet();
  var editedCell=sheet.getActiveCell();
  var columnToSortBy=4;
  var columnToArchive=5;
  var tableRange= "A2:F!";

  if(editedCell.getColumn() == columnToSortBy){
    var range=sheet.getRange(tableRange);
    range.sort( {column : columnToSortBy} );
  }
  else{
    if(editedCell.getColumn() == columnToArchive){
      var rowToBeMoved=editedCell.getRow();
      var rangeToBeMoved=sheet.getRange("A" + rowToBeMoved + ":F" + rowToBeMoved);
      var values=rangeToBeMoved.getValues();
      var archiveSpreadSheet=SpreadsheetApp.openById("0AroBvchobu2edHNXQ3ZUQjI5TWJtWWZwa1UtcExPNnc");
      var archiveSheet=archiveSpreadSheet.getSheetByName("archive");
      archiveSheet.appendRow(values);
    }
  }
}

我已经确定问题出在第二个if块中的最后三行。似乎在行“var values = rangeToBeMoved.getValues();”之后,脚本停止运行,因为如果我在该行之后或之前的任何地方放置了Browser.msgBox(“hi”),那么该消息会出现,但如果我把它放在下一行之后,它不会出现。问题出在.openById()上?帮助!

1 个答案:

答案 0 :(得分:1)

这段代码正在运行:

更新时间:10-01-2013
您需要使用columnIndex而不是getColumn:

function onEdit(event) {
  // set items for current spreadsheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getActiveSheet();
  var row = sh.getActiveRange().getRowIndex();
  var col = sh.getActiveRange().getColumnIndex();
  var columnToSortBy=4;
  var columnToArchive=5;
  var tableRange= "A2:F!";

  if(col == columnToSortBy){
    var range=sh.getRange(tableRange);
    range.sort( {column : columnToSortBy} );
  }

  if(col == columnToArchive){   
    var rangeToBeMoved=sh.getRange("A" + row + ":F" + row);
    var values=rangeToBeMoved.getValues();
    var archiveSpreadSheet=SpreadsheetApp.openById("your key");
    var archiveSheet=archiveSpreadSheet.getSheetByName("Sheet1");        
    archiveSheet.appendRow(values[0]);
  }
}    

appendRow只接受一维数组。 getRange将生成2D数组。添加零(方括号之间)将使其成为一维数组。