如果在第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()上?帮助!
答案 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数组。添加零(方括号之间)将使其成为一维数组。