Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.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 sheets getRange变量范围_Google Sheets_Ranking - Fatal编程技术网

Google sheets getRange变量范围

Google sheets getRange变量范围,google-sheets,ranking,Google Sheets,Ranking,我正在尝试使用谷歌表对元素列表进行排序。这个列表是不断更新的,所以如果我已经有数百个元素进行了排名,并且需要对10个新元素进行排名,那么更新列表可能会很麻烦。我认为编写一个宏为我重新排序比每次重新排序(无论是手动排序还是使用公式排序)更容易 1-要素A 2-要素B 3-元素C 新元素:元素D 例如,如果我希望元素D排名第二,我需要将元素B更改为3,将元素C更改为4。当执行数百个元素时,这是非常乏味的 这是到目前为止我的代码,但是我被getRange行卡住了。排名在A列 function Ran

我正在尝试使用谷歌表对元素列表进行排序。这个列表是不断更新的,所以如果我已经有数百个元素进行了排名,并且需要对10个新元素进行排名,那么更新列表可能会很麻烦。我认为编写一个宏为我重新排序比每次重新排序(无论是手动排序还是使用公式排序)更容易

1-要素A

2-要素B

3-元素C

新元素:元素D

例如,如果我希望元素D排名第二,我需要将元素B更改为3,将元素C更改为4。当执行数百个元素时,这是非常乏味的

这是到目前为止我的代码,但是我被getRange行卡住了。排名在A列

 function RankElements() { 

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getActiveSheet();
  var r = s.getActiveCell();
  var v1 = r.getValue();
  var v2 = v1 + 1 
  var v3 = v2 + 1
  var lastRow = s.getLastRow();
  s.getRange(1,v2).setValue(v2);
  s.getRange(1,v3).autoFill(s.getRange(1,v3+":"+1,lastRow), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
  s.getRange(1,v3+":"+1,lastRow).copyTo(s.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  s.getFilter().sort(1, true);
};

您可以执行以下操作:

  • 遍历A列中的所有值
  • 对于每个值,检查(1)排名是否等于或低于新的排名,以及(2)不是要添加的元素
  • 如果这两个条件都满足,则将
    1
    添加到当前排名中
可能是这样的:

函数RankElements(){
const sheet=SpreadsheetApp.getActiveSheet();
const cell=sheet.getActiveCell();
常量行=cell.getRow();
const newRanking=sheet.getActiveCell().getValue();
常数firstRow=2;
const columnA=sheet.getRange(第一行,1,sheet.getLastRow()-1).getValues()
.map(行=>行[0]);//检索列A值
对于(设i=0;i=newRanking&&(i+firstRow)!=row){
sheet.getRange(第一行+i,1).setValue(columnA[i]+1);//将1添加到排名中
}
}
sheet.getFilter().sort(1,true);
};

应根据哪些元素进行排名?用户如何手动更新列表?你能分享一份你正在制作的电子表格,以及你期望的结果吗?根据用户偏好排列在a列。由用户手动更新,将输入新添加的行/元素的排名,然后运行脚本/宏来更新列表的其余部分并返回。这是我做的一张假床单。你能公开这个文件吗?至少在查看访问方面。哦,抱歉,刚刚发布了。谢谢。据我所知,您希望手动添加新行,然后启动函数来更新列表的其余部分。在这种情况下,您将如何指定刚才添加的元素(其排名不应更改)和之前存在的元素(其排名应更新)?我在这里考虑几种可能性:(1)使用
onEdit
触发此操作;(2)使用脚本属性区分新元素和旧元素。你觉得这个怎么样?什么更适合你的情况?这太完美了。非常感谢。