【发布时间】:2020-07-02 23:19:56
【问题描述】:
我有一个谷歌表格文件。在这个文件中,我为满足以下条件的每一行设置了背景颜色:
即:如果第 8 列为空,则将整行背景颜色设置为红色。
我已经能够做到这一点。但现在我想做的是在第 8 列已满的无色行/行之后将所有红色行向下推。
您能帮我解决这个问题吗?我有以下代码,但我完全不知道如何进行排序。
谢谢。
function SelectRecords() {
const ss=SpreadsheetApp.getActive();
const sh=ss.getSheets()[0];
const rg=sh.getRange(3,1,sh.getLastRow()-2,sh.getLastColumn());
let vs=rg.getValues()
var rows=vs.map(function(r,i){
if(r[8]=='') {
sh.getRange(i+3,1,1,sh.getLastColumn()).setBackground('#ff0000');
return r;
}
}).filter(function(e){return e;});
}
SHEET_NAME = "CURRENT MONTH";
SORT_DATA_RANGE = "A4:J999";
var SORT_ORDER = [{column: 8, ascending: false}];
function sorting(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(SHEET_NAME);
var SORT_DATA_RANGE = "A4:I";
var range = sheet.getRange(SORT_DATA_RANGE);
range.sort(SORT_ORDER);
ss.toast('Sort complete.');
}
【问题讨论】:
-
因为这不是您的第一个问题:请不要在问题中添加appscript 标签,因为您的问题与google-apps-script 有关。我们有一个漫长而痛苦的problem with the tag,如果您能帮助我们解决这个问题,我们将不胜感激
-
哦,我明白了。将停止这样做。对此非常抱歉。但是你能给我一个线索吗?我真的很想知道这是怎么做到的。因为我现在正在使用 Google 表格。谢谢。
-
不用担心 - 标签的原始用途在很久以前就过期了,但我们仍然不能使其成为 GAS 的同义词,因此问题......也就是说,我不认为你可以使用
Range类sort方法实现你想要的——据我所知,它只能按列值排序。你想做的是,嗯,有点复杂:获取所有背景,与行索引关联,然后sort这些“元数据”对象,然后使用moveRows类的moveRows方法相应地移动行
标签: sorting google-apps-script google-sheets google-sheets-api