Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 在编辑()上对特定范围进行排序_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 在编辑()上对特定范围进行排序

Google apps script 在编辑()上对特定范围进行排序,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我正在尝试自动对工作表的某个区域进行排序onEdit,使其顶部为空单元格,底部为最早的条目。 我已从获得此代码,并尝试根据我的需要对其进行修改: function onEdit(e) { var sheet = ss.getActiveSheet(); if( sheet != ss.getSheetByName('cover sheet')) { var editRange = { // B4:J6 top: 29, bottom

我正在尝试自动对工作表的某个区域进行排序
onEdit
,使其顶部为空单元格,底部为最早的条目。 我已从获得此代码,并尝试根据我的需要对其进行修改:

function onEdit(e)
{
  var sheet = ss.getActiveSheet();
   if( sheet != ss.getSheetByName('cover sheet'))
   {
      var editRange = { // B4:J6
         top: 29,
         bottom: sheet.getLastRow()+1,
         left: 4,
         right: 11
      };
      // Exit if we're out of range
      var thisRow = e.range.getRow();
      if (thisRow < editRange.top || thisRow > editRange.bottom) return;

      var thisCol = e.range.getColumn();
      if (thisCol < editRange.left || thisCol > editRange.right) return;

      // We're in range; timestamp the edit
      var ss = e.range.getSheet();
      ss.getRange(editRange).sort({column: 1, ascending: true});
   }
}
函数onEdit(e)
{
var sheet=ss.getActiveSheet();
如果(表!=ss.getSheetByName(‘封面页’)
{
var editRange={//B4:J6
排名:29,
底部:sheet.getLastRow()+1,
左:4,,
右:11
};
//如果超出范围,请退出
var thisRow=e.range.getRow();
if(thisRoweditRange.bottom)返回;
var thisCol=e.range.getColumn();
如果(thisColeditRange.right)返回;
//我们在范围内;给编辑加时间戳
var ss=e.range.getSheet();
getRange(editRange).sort({列:1,升序:true});
}
}
但这是行不通的。有什么想法吗?这里是一个链接

您需要的应该是这样的:

function onEdit(e) {
  var thisSS = e.source,
      editedRow = e.range.getRow(),
      editedCol = e.range.getColumn();

  if(editedCol === 4){
    thisSS.sort(editedCol, false);
  }
  thisSS.insertRowBefore(2);
}
然后将其粘贴到工作表的脚本中,然后转到“资源>>当前项目的触发器”,并设置触发器以在onEdit事件发生时运行函数“onEdit”

致以最良好的祝愿。

好的

您需要的应该是这样的:

function onEdit(e) {
  var thisSS = e.source,
      editedRow = e.range.getRow(),
      editedCol = e.range.getColumn();

  if(editedCol === 4){
    thisSS.sort(editedCol, false);
  }
  thisSS.insertRowBefore(2);
}
然后将其粘贴到工作表的脚本中,然后转到“资源>>当前项目的触发器”,并设置触发器以在onEdit事件发生时运行函数“onEdit”


致以最诚挚的问候。

请确保您声明的区域中有单元格。正如@SpiderPig在本文中提到的,如果给定范围内没有单元格,则范围将无效

为此,您还可以尝试使用
bottom:sheet.getLastRow()-1
,如下面给出的解决方案所示:

function AutoSortOnEdit() {
    var sheetNames = ["testsheet456", "testsheet457", "testsheet458"];

    var ss = SpreadsheetApp.getActiveSpreadsheet();
    sheetNames.forEach(function(name) {
        var sheet = ss.getSheetByName(name);
        var range = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn());
        range.sort({column: 1, ascending: true});
    });
}

希望对你有用。快乐编码

请确保您声明的区域中有单元格。正如@SpiderPig在本文中提到的,如果给定范围内没有单元格,则范围将无效

为此,您还可以尝试使用
bottom:sheet.getLastRow()-1
,如下面给出的解决方案所示:

function AutoSortOnEdit() {
    var sheetNames = ["testsheet456", "testsheet457", "testsheet458"];

    var ss = SpreadsheetApp.getActiveSpreadsheet();
    sheetNames.forEach(function(name) {
        var sheet = ss.getSheetByName(name);
        var range = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn());
        range.sort({column: 1, ascending: true});
    });
}

希望对你有用。快乐编码

那它不起作用呢?你能提供一个例子来说明它做什么和应该做什么吗?如果一张纸不是封面,它应该对一张纸上的特定行进行排序。它什么也不做。我将创建一个示例电子表格,尝试使用一些
Logger.log('some text here:'+variableName)
语句从代码编辑器运行该函数,然后查看日志以查看它打印到日志中的内容。例如将
Logger.log('it run!')
放在函数的最顶端,以确定函数是否正在运行。将第一个
if
语句更改为:
if(sheet.getName()==='cover sheet')
在编辑(e)之后立即执行了记录器{这没有进展,所以我想出于某种原因,脚本不会自动触发。知道为什么吗?脚本绑定到工作表上。它不工作了吗?你能提供一个示例来说明它做什么和应该做什么吗?如果工作表不是封面,它应该对工作表中的特定行进行排序。它什么都不做。我将创建一个s示例电子表格尝试使用一些
Logger.log('此处的一些文本:'+variableName)
语句从代码编辑器运行函数,然后查看日志以查看它打印到日志中的内容。例如,Put
Logger.log('它已运行!')
位于函数的最顶端,以确定函数是否正在运行。将第一个
if
语句更改为:
if(sheet.getName()==='cover sheet')
在编辑(e)后立即执行了记录器{这没有进展,所以我想出于某种原因,脚本不会自动触发。知道为什么吗?脚本绑定到工作表。不幸的是,我需要另一种解决方案,而不是插入行,因为在这个区域的左侧是一个不应更改的区域。排序也不应离开框的边界,而是在框内排序框。不幸的是,我需要另一种解决方案,而不是插入行,因为在此区域的左侧是一个不应更改的区域。此外,排序不应离开框的边界,而是在框内进行排序。我有点担心运行时:如果我看到右侧,它总是对该区域中的所有图纸进行排序,即使nge不是在那个区域制作的。从技术上讲,如果编辑是在那个区域,那么只对被编辑的工作表进行排序就足够了,还是我错了?我有点担心运行时间:如果我认为正确,它总是对那个区域的所有工作表进行排序,即使没有在那个区域进行更改。从技术上讲,只对shee进行排序就足够了如果编辑是在那个区域,那它就被编辑了,还是我错了?