javascript - Google 电子表格脚本 - 表更改时自动排序

标签 javascript google-api google-sheets google-sheets-api

使用 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 } );
}

但是,我的整个表格由引用不同工作表的公式填充,如果我更改不同工作表中的值,第一张工作表上的表值会发生变化,但不会进行排序,因为事件没有发生在那张纸上。

有没有办法添加功能,以便在表中的信息发生更改时对表进行排序,而不是手动编辑表?我研究了 onChange() 事件,但不确定它到底如何使用。

最佳答案

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”包括示例。

关于javascript - Google 电子表格脚本 - 表更改时自动排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32029359/

相关文章:

java - 通过 API 在 Google Drive 上共享文件时防止默认 "Editors will be allowed to add people and change the permissions"行为

google-api - 谷歌管理员 SDK 目录 API : Adding group as member with role "OWNER" gets error

javascript - 无法聚焦 onOpen 触发器中的单元格

Javascript 数组 - 迭代数据元素

javascript - 是否可以将 JavaScript 数组元素超链接到 HTML 表格中?

google-api - 使用 Freebase MQL 读取 google api 的非唯一查询

尝试访问 Google 电子表格时的 Node.js

filter - Google 电子表格,过滤器不允许使用通配符?如何使用通配符计算多个列?

javascript - Javascript 中的可折叠部分/区域(Visual Studio 2010/2012)

javascript - 一旦用户对任何项目进行评分,就从 php 调用 Facebook 共享代码