首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google电子表格脚本在创建时可用,但在离线或关闭文档后不再工作

问Google电子表格脚本在创建时可用,但在离线或关闭文档后不再工作
EN

Stack Overflow用户
提问于 2017-02-20 23:09:45
回答 2查看 481关注 0票数 0

我对脚本业务非常陌生,而且我很难让我制作的脚本正常工作。我需要按列对我的电子表格进行排序,所以我在google apps论坛的一个封闭主题中找到了一个解决方案,该方案由一个用户KaseyBrown提供,这对我很有帮助(我自己不可能做到这一点)。以下是我的版本:

代码语言:javascript
复制
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上也是如此。

任何想法都将不胜感激;非常感谢您的宝贵时间;胡安。

EN

回答 2

Stack Overflow用户

发布于 2017-02-21 00:09:53

您应该尝试用其他名称重命名函数'onEdit‘(例如,’sortOnEdit‘)。'onEdit’是一个保留名称,将在编辑时自动触发函数。但此触发器的权限有限。要触发你的函数,你需要在菜单“资源>当前项目的触发器”中设置一个触发器。

​

建议:将通知设置为“立即”。

票数 0
EN

Stack Overflow用户

发布于 2017-02-21 04:47:56

并不是一个真正的答案

只是关于代码中的逻辑的一点放大信息。

代码语言:javascript
复制
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语句中的条件是怎么回事,所以我写了一个小例程来为它构建一个真值表。我在脚本编辑器中运行了它,我相信这部分

代码语言:javascript
复制
if (editedCell.getColumn() == columnToCheck1, columnToCheck2, columnToCheck3, columnToCheck4, columnToCheck5, columnToCheck6, columnToCheck7, columnToCheck8

总是正确的。然后我修改了代码,如下所示:

代码语言:javascript
复制
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语句条件实际上是:

代码语言:javascript
复制
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.");
  }
}

我用下面的代码在不同的页面和栏目上尝试了一系列不同的编辑:

代码语言:javascript
复制
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 -我学到了很多关于如何设置触发器的知识。谢谢你提供的信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42348002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档