Google sheets getRange变量范围
我正在尝试使用谷歌表对元素列表进行排序。这个列表是不断更新的,所以如果我已经有数百个元素进行了排名,并且需要对10个新元素进行排名,那么更新列表可能会很麻烦。我认为编写一个宏为我重新排序比每次重新排序(无论是手动排序还是使用公式排序)更容易 1-要素A 2-要素B 3-元素C 新元素:元素D 例如,如果我希望元素D排名第二,我需要将元素B更改为3,将元素C更改为4。当执行数百个元素时,这是非常乏味的 这是到目前为止我的代码,但是我被getRange行卡住了。排名在A列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
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)使用脚本属性区分新元素和旧元素。你觉得这个怎么样?什么更适合你的情况?这太完美了。非常感谢。