【问题标题】:Google Spreadsheet Script - Autosort on Table ChangeGoogle 电子表格脚本 - 表更改时自动排序
【发布时间】:2015-08-15 21:08:03
【问题描述】:

使用 Google Apps 脚本,我有以下代码,每当我编辑表格中的信息时,它就会自动对表格进行排序。

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() 事件,但不确定它到底可以如何使用。

【问题讨论】:

    标签: javascript google-api google-sheets google-spreadsheet-api


    【解决方案1】:

    onChange 文档有一个例子: 来自:https://developers.google.com/apps-script/reference/script/spreadsheet-trigger-builder

     var sheet = SpreadsheetApp.getActive();
     ScriptApp.newTrigger("myFunction")
       .forSpreadsheet(sheet)
       .onChange()
       .create();
    

    如何添加触发器:来自http://www.labnol.org/internet/google-docs-email-form/20884/

    /* 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 */
    

    转到“运行”菜单并选择“初始化”。 Google 脚本现在将要求您授权脚本 - 只需单击“接受”按钮即可完成。 或者您可以使用 onOpen 函数自动添加,我认为“FormEmailer”包括和示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-02
      • 2020-10-31
      • 1970-01-01
      • 2015-02-28
      相关资源
      最近更新 更多