我正在处理 Google 表格文档(链接在本段末尾),旨在跟踪人们借用的配件。我编写了一个公式,可以将条目的状态更新为以下选项:良好、过期、已退回、延迟退回和缺少信息。我的目标是每天重新排列行,将过期项目放在第一位,状态条目第二,缺少信息第三,最后返回项目。通过使用内置的数据过滤器,我能够做到类似的事情。为此,我转到数据-> 创建过滤器-> 单击状态栏右下角的符号-> 排序 ZA。但是,此解决方案是手动的,因为(据我所知)无法使用应用程序脚本运行过滤器功能。此外,它对行进行排序的顺序并不是我所需要的。
function swap(i, target, correctOrd){
var link = decVar();
var temp = 0;
temp = link.mainSheet.getRange(i, 1, 1, link.col).getValues();
var oneRowCopy = link.mainSheet.getRange(i,1,1, link.col);
var targetRow = link.mainSheet.getRange(target,1,1, link.col);
oneRowCopy.copyTo(targetRow);
temp.copyTo(targetRow);
}
function reArrange(){
var correctOrd = [].concat.apply([], getStatus());
var link = decVar(); var temp = 0;
for(var i = 2, j = 0; i<correctOrd.length+1; i++, j++){
if(i != correctOrd[j]){
swap(i, j, correctOrd);
correctOrd[j] = i;
}
}
}
其余代码可以在共享文档的脚本部分找到。
https://docs.google.com/spreadsheets/d/15qaNHuMoVyEJmwR5pL9ruPFDeiNR60cKWLKxnfjaWko/edit?usp=sharing
如果您对如何完成这样的事情或我的代码做错了什么有任何想法,请告诉我。谢谢!
尽管与 Java 脚本数组函数相比,内置电子表格函数可能会很慢,但此自定义构建函数可用于您的测试用例:
function OverdueGoodMissingReturned() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getSheetByName("Main");
var lr = sh.getLastRow();
var lc = sh.getLastColumn();
var irng = sh.getRange(1,9,lr,1).getValues(); //get col I (StatusColumn)
var irngF = irng.map(flatten); //Flatten the 2D array
function flatten(e) {return e[0];}
var lr = irngF.indexOf(''); //Find actualLast Row (This is needed,because you filled all the rows with Data Validations)
var rng = sh.getRange(2,1,lr-1,lc); //getWholeRange
rng.sort(9); //Sort by the status Column 9,Default Sort is Good,Missing,Overdue,Returned
var rv = rng.getValues();
var irng = sh.getRange(1,9,lr,1).getValues();
var irngF = irng.map(flatten);
var O1 = irngF.indexOf('Overdue')+1; // Find first overdue
var O2 = irngF.lastIndexOf('Overdue')+1; //Find Last overdue
var mv = sh.getRange(O1+':'+O2); //getRange to move
sh.moveRows(mv,2); //Move Overdue to Top
}
注意:如果您不使用数据验证填充空行,则可能会中断很多 getRange 调用。rng.sort
也可以缩短为sheet.sort()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句