我有一本Google表格工作簿,其中有多个按日期命名的工作表。我正在尝试使用Google Apps脚本来1)以相反的时间顺序对这些工作表重新排序,然后2)然后将所有将来的工作表移动到工作簿的末尾,因此第一工作表始终是最新的工作表过去的日期。
第1步可以使用以下代码正常运行:
function sortGoogleSheets() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
// Store all the worksheets in this array
var sheetNameArray = [];
var sheets = ss.getSheets();
for (var i = 0; i < sheets.length; i++) {
sheetNameArray.push(sheets[i].getName());
}
sheetNameArray.sort().reverse();
// Reorder the sheets.
for( var j = 0; j < sheets.length; j++ ) {
ss.setActiveSheet(ss.getSheetByName(sheetNameArray[j]));
ss.moveActiveSheet(j + 1);
}
}
但是第2步无法将将来的图纸移到末尾。没有生成错误,但工作表顺序不变。“ FutureSheetIDs”是一个单列命名范围,其中包含日期大于今天的工作表ID(例如938739529、532578283等),即要移至工作簿的末尾。
function resortFutureSheets() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var pos = ss.getNumSheets();
var FutureSheets = ss.getRangeByName("FutureSheetIDs");
for(var s=0 ; s < FutureSheets.length ; s++){
var sh = ss.setActiveSheet(ss.getSheetByID(FutureSheets[s]));
SpreadsheetApp.flush();
Utilities.sleep(200);
ss.moveActiveSheet(pos);
SpreadsheetApp.flush();
Utilities.sleep(200);
}
}
对于第2步为何无法按预期运行的任何指导,将不胜感激。谢谢!
尝试使用Sheets API,该API作为Advanced Sheets Service集成到Apps脚本中。
工作表在电子表格中的索引。添加或更新图纸属性时,如果不包含此字段,则会将图纸添加或移动到图纸列表的末尾。在更新图纸索引或插入图纸时,将在“移动之前”索引中考虑移动。例如,如果有3张纸(S1,S2,S3)以便将S1移到S2之前,则必须将索引设置为2。如果所请求的索引与当前纸页相同,则忽略纸索引更新请求。索引,或者如果请求的新索引等于当前工作表索引+1。
因此,对于您的请求,修改工作表的索引将很有用,您可以使用
后使高级表格服务,可以改变片材如下的索引(=位置):
function myFunction() {
var ss=SpreadsheetApp.getActiveSpreadsheet();
var FutureSheets=ss.getRangeByName("FutureSheets");
var FutureIds=FutureSheets.getValues();
var spreadsheetId=ss.getId();
var sheets=ss.getSheets();
for(s=0;s<FutureIds.length;s++) {
if(FutureIds[s][0]==0){
break;
}else{
var resource = {
"requests": [
{
"updateSheetProperties": {
"fields": "index",
"properties": {
"sheetId": FutureIds[s][0],
"index": sheets.length
}
}
}
]
}
Sheets.Spreadsheets.batchUpdate(resource, spreadsheetId)
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句