按日期重新排列Google表格工作表

用户名

我有一本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 APIAPI作为Advanced Sheets Service集成到Apps脚本中

您可以检索和修改工作表ID和工作表索引,据文档中的说明

工作表在电子表格中的索引。添加或更新图纸属性时,如果不包含此字段,则会将图纸添加或移动到图纸列表的末尾。在更新图纸索引或插入图纸时,将在“移动之前”索引中考虑移动。例如,如果有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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章