Google 电子表格脚本 - 在 Table 更改时自动排序
Google Spreadsheet Script - Autosort on Table Change
使用 Google Apps 脚本,我有以下代码,每当我在 table 中编辑信息时自动对 table 进行排序。
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 } );
}
但是,我的整个 table 由引用不同 sheet 的公式填充,如果我更改不同 sheet 中的值,table第一个 sheet 的值发生变化,但未排序 b/c 事件未在 sheet 上发生。
有没有办法在 table 中的信息发生变化时添加对 table 进行排序的功能,而不是手动编辑 table?我已经研究了 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" 包括如何示例。
使用 Google Apps 脚本,我有以下代码,每当我在 table 中编辑信息时自动对 table 进行排序。
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 } );
}
但是,我的整个 table 由引用不同 sheet 的公式填充,如果我更改不同 sheet 中的值,table第一个 sheet 的值发生变化,但未排序 b/c 事件未在 sheet 上发生。
有没有办法在 table 中的信息发生变化时添加对 table 进行排序的功能,而不是手动编辑 table?我已经研究了 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" 包括如何示例。