【问题标题】:Google Spreadsheets (app-script) copying a row of information to another spreadsheet谷歌电子表格(应用程序脚本)将一行信息复制到另一个电子表格
【发布时间】:2013-01-08 20:41:04
【问题描述】:

如果在第 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() 上?帮助!

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    这段代码正在运行:

    更新:2013 年 10 月 1 日
    您需要使用 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 将产生一个二维数组。添加零(在方括号之间)将使其成为一维数组。

    【讨论】:

    • 是的,我发现附加行不起作用,已修复,但还有另一个问题。我认为问题在于使用事件参数,它不会打开另一个电子表格。似乎有一个错误,脚本的编辑触发器似乎与打开另一张表发生冲突。感谢您的回复!
    猜你喜欢
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    • 2013-11-16
    • 2021-06-05
    • 2019-02-06
    相关资源
    最近更新 更多