我对脚本业务非常陌生,而且我很难让我制作的脚本正常工作。我需要按列对我的电子表格进行排序,所以我在google apps论坛的一个封闭主题中找到了一个解决方案,该方案由一个用户KaseyBrown提供,这对我很有帮助(我自己不可能做到这一点)。以下是我的版本:
var sheetToSort = "Letras"; // name of sheet to be sorted
var columnToCheck1 = 2; // column to check for edits
var columnToCheck2 = 3; // second column to be checked for edits
var columnToCheck3 = 6;
var columnToCheck4 = 10;
var columnToCheck5 = 11;
var columnToCheck6 = 12;
var columnToCheck7 = 13;
var columnToCheck8 = 14;
var columnToSortBy = 16; // column to sort by; A = 1, B = 2, etc.
var rangeToSort = "A1:P150"; // range of values to be sorted
function onEdit(event) {
var sheet = SpreadsheetApp.getActiveSheet();
var editedCell = sheet.getActiveCell();
if (editedCell.getColumn() == columnToCheck1, columnToCheck2, columnToCheck3, columnToCheck4, columnToCheck5, columnToCheck6, columnToCheck7, columnToCheck8 && sheet.getName() == sheetToSort) {
sortOpenCases();
}
}
function sortOpenCases() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetToSort);
var range = sheet.getRange(rangeToSort);
range.sort( { column : columnToSortBy, ascending: true } );
}问题是:在创建脚本时,它工作得很好,并且完全按照您需要的方式进行编辑,直到您离线或关闭文档。一旦您这样做了,当您返回工作表时,脚本将不再工作,即使您转到编辑器并再次按“运行”也是如此。未显示错误信息。但是如果我复制它并重新创建它,它将再次工作…直到我脱机或再次关闭文档。在Chrome或Mozilla上也是如此。
任何想法都将不胜感激;非常感谢您的宝贵时间;胡安。
发布于 2017-02-21 00:09:53
您应该尝试用其他名称重命名函数'onEdit‘(例如,’sortOnEdit‘)。'onEdit’是一个保留名称,将在编辑时自动触发函数。但此触发器的权限有限。要触发你的函数,你需要在菜单“资源>当前项目的触发器”中设置一个触发器。


建议:将通知设置为“立即”。
发布于 2017-02-21 04:47:56
并不是一个真正的答案
只是关于代码中的逻辑的一点放大信息。
function onEdit(event) {
var sheet = SpreadsheetApp.getActiveSheet();
var editedCell = sheet.getActiveCell();
if (editedCell.getColumn() == columnToCheck1, columnToCheck2, columnToCheck3, columnToCheck4, columnToCheck5, columnToCheck6, columnToCheck7, columnToCheck8 && sheet.getName() == sheetToSort) {
sortOpenCases();
}
}我不明白if语句中的条件是怎么回事,所以我写了一个小例程来为它构建一个真值表。我在脚本编辑器中运行了它,我相信这部分
if (editedCell.getColumn() == columnToCheck1, columnToCheck2, columnToCheck3, columnToCheck4, columnToCheck5, columnToCheck6, columnToCheck7, columnToCheck8总是正确的。然后我修改了代码,如下所示:
function do_onEdit(e)
{
dispStatus('Do On Edit', 'At the beginning of do_onEdit',400,200);
var sheetToSort = "Sheet2"; // name of sheet to be sorted
var columnToCheck1 = 2; // column to check for edits
var columnToCheck2 = 3; // second column to be checked for edits
var columnToCheck3 = 6;
var columnToCheck4 = 10;
var columnToCheck5 = 11;
var columnToCheck6 = 12;
var columnToCheck7 = 13;
var columnToCheck8 = 14;
var columnToSortBy = 16; // column to sort by; A = 1, B = 2, etc.
var rangeToSort = "A1:P150"; // range of values to be sorted
var sheet = SpreadsheetApp.getActiveSheet();
var editedCell = sheet.getActiveCell();
if (editedCell.getColumn() == columnToCheck1, columnToCheck2, columnToCheck3, columnToCheck4, columnToCheck5, columnToCheck6, columnToCheck7, columnToCheck8 && sheet.getName() == sheetToSort)
{
SpreadsheetApp.getUi().alert("I'm busy sorting don't bother me.");
}
}在对每个工作表的范围的不同列进行各种编辑之后,我必须得出结论,只有在编辑"sheetToSort“时才会调用sortOpenCases(),我将其更改为Sheet2。因此,if语句条件实际上是:
function do_onEdit(e)
{
dispStatus('Do On Edit', 'At the beginning of do_onEdit',400,200);
var sheetToSort = "Sheet2"; // name of sheet to be sorted
var columnToCheck1 = 2; // column to check for edits
var columnToCheck2 = 3; // second column to be checked for edits
var columnToCheck3 = 6;
var columnToCheck4 = 10;
var columnToCheck5 = 11;
var columnToCheck6 = 12;
var columnToCheck7 = 13;
var columnToCheck8 = 14;
var columnToSortBy = 16; // column to sort by; A = 1, B = 2, etc.
var rangeToSort = "A1:P150"; // range of values to be sorted
var sheet = SpreadsheetApp.getActiveSheet();
var editedCell = sheet.getActiveCell();
if (sheet.getName() == sheetToSort)
{
SpreadsheetApp.getUi().alert("I'm busy sorting don't bother me.");
}
}我用下面的代码在不同的页面和栏目上尝试了一系列不同的编辑:
function do_onEdit(e)
{
dispStatus('Do On Edit', 'At the beginning of do_onEdit',400,200);
var sheetToSort = "Sheet2"; // name of sheet to be sorted
var columnToCheck1 = 2; // column to check for edits
var columnToCheck2 = 3; // second column to be checked for edits
var columnToCheck3 = 6;
var columnToCheck4 = 10;
var columnToCheck5 = 11;
var columnToCheck6 = 12;
var columnToCheck7 = 13;
var columnToCheck8 = 14;
var columnToSortBy = 16; // column to sort by; A = 1, B = 2, etc.
var rangeToSort = "A1:P150"; // range of values to be sorted
var sheet = SpreadsheetApp.getActiveSheet();
var editedCell = sheet.getActiveCell();
if (editedCell.getColumn() == columnToCheck1, columnToCheck2, columnToCheck3, columnToCheck4, columnToCheck5, columnToCheck6, columnToCheck7, columnToCheck8 && sheet.getName() == sheetToSort)
{
SpreadsheetApp.getUi().alert("I'm busy sorting don't bother me.");
}
}因此,排序仅在编辑"sheetToSort“时发生,并且在"sheetToSort”上的每一列上都会发生。欢迎您自己测试这最后一小段代码,因为它实际上并不调用sortOpenCases();
@Harold -我学到了很多关于如何设置触发器的知识。谢谢你提供的信息。
https://stackoverflow.com/questions/42348002
复制相似问题