Javascript 谷歌电子表格脚本-表格更改自动排序

Javascript 谷歌电子表格脚本-表格更改自动排序,javascript,google-api,google-sheets,google-spreadsheet-api,Javascript,Google Api,Google Sheets,Google Spreadsheet Api,使用GoogleApps脚本,我有以下代码,每当我编辑表中的信息时,都会自动对表进行排序 function onEdit(event){ var sheet = event.source.getActiveSheet(); var columnToSortBy = 3; var tableRange = "A3:AQ11"; var range = sheet.getRange(tableRange); range.sort( { column : columnT

使用GoogleApps脚本,我有以下代码,每当我编辑表中的信息时,都会自动对表进行排序

function onEdit(event){
  var sheet = event.source.getActiveSheet();
  var columnToSortBy = 3;
  var tableRange = "A3:AQ11";  
  var range = sheet.getRange(tableRange);
      range.sort( { column : columnToSortBy, ascending: false } );
}
但是,我的整个表格都由引用不同工作表的公式填充,如果我更改了不同工作表中的值,则第一个工作表上的表格值会更改,但不会排序b/c该工作表上不会发生事件


是否有一种方法可以在表中的信息发生更改时添加对表进行排序的功能,而不是手动编辑表?我已经研究了
onChange()
事件,但不确定如何准确地使用它

onChange docs有一个例子: 发件人:

如何添加触发器:从

/*通过电子邮件发送谷歌表单数据v3.0*/
/*资料来源:http://labnol.org/?p=20884  */
/**
*@OnlyCurrentDoc
*/
函数初始化(){
var triggers=ScriptApp.getProjectTriggers();
for(触发器中的var i)
ScriptApp.deleteTrigger(触发器[i]);
ScriptApp.newTrigger(“SendGoogleForm”)
.forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())
.onFormSubmit().create();
}
函数SendGoogleForm(e){
if(MailApp.getRemainingDailyQuota()<1)返回;
//您可以用其他电子邮件地址替换此地址
var电子邮件=”hello@ctrlq.org";
//输入谷歌表单电子邮件通知的主题
var subject=“谷歌表单已提交”;
var s=SpreadsheetApp.getActiveSheet();
var columns=s.getRange(1,1,1,s.getLastColumn()).getValues()[0];
var message=“”;
//仅包括非空的表单字段
for(列中的变量键){
var key=列[键];
if(e.namedValues[key]&&(e.namedValues[key]!=“”){
message+=key+'::“+e.namedvalue[key]+”\n\n”;
}
}
MailApp.sendmail(电子邮件、主题、消息);
}
/*如需支持,请通过www.ctrlq.org联系开发者*/
转到运行菜单并选择初始化。Google脚本现在需要您授权该脚本–只需单击“接受”按钮即可完成。 或者您可以使用onOpen功能自动添加,我认为“FormEmailer”包括了如何添加的示例

 var sheet = SpreadsheetApp.getActive();
 ScriptApp.newTrigger("myFunction")
   .forSpreadsheet(sheet)
   .onChange()
   .create();
/* Send Google Form Data by Email v3.0 */
/* Source: http://labnol.org/?p=20884  */

/**
* @OnlyCurrentDoc
*/

function Initialize() {

    var triggers = ScriptApp.getProjectTriggers();

    for (var i in triggers)
        ScriptApp.deleteTrigger(triggers[i]);

    ScriptApp.newTrigger("SendGoogleForm")
        .forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())
        .onFormSubmit().create();
}

function SendGoogleForm(e) {

    if (MailApp.getRemainingDailyQuota() < 1) return;

    // You may replace this with another email address
    var email = "hello@ctrlq.org";

    // Enter your subject for Google Form email notifications
    var subject = "Google Form Submitted";

    var s = SpreadsheetApp.getActiveSheet();
    var columns = s.getRange(1, 1, 1, s.getLastColumn()).getValues()[0];
    var message = "";

    // Only include form fields that are not blank
    for (var keys in columns) {
        var key = columns[keys];
        if (e.namedValues[key] && (e.namedValues[key] !== "")) {
            message += key + ' :: ' + e.namedValues[key] + "\n\n";
        }
    }

    MailApp.sendEmail(email, subject, message);
}

/* For support, contact the develop at www.ctrlq.org */