簡體   English   中英

Google Apps 腳本排序選項卡/工作表 - 按最新日期優先且不排序/顯示隱藏工作表?

[英]Google Apps Script Sort Tabs/Sheets - by Latest Date First and don't sort/show hidden sheets?

我正在嘗試按日期對選項卡進行排序,將最新日期放在首位; 我發現這段代碼很有幫助,但在我使用它時似乎反轉了。 我不知道如何添加到代碼中,這樣它就不會打開隱藏的選項卡; 而且我不想讓它對一個名為“學生”的標簽進行排序,並將其保留為第一個標簽。

預期的(有希望的)行為是它按原樣離開“學生”選項卡,並將剩余打開的選項卡與最新日期排在最前面(一致地); 並且不會取消隱藏隱藏的選項卡。

實際行為是它對所有選項卡進行排序,取消隱藏那些隱藏的選項卡 - 第一次運行時將最新選項卡放在首位; 然后當我再次運行它時,它會顛倒順序,最后日期是最后(它包括排序中的“學生”選項卡。

這是一個鏈接如果您想查看示例文件。 謝謝你。

示例文件

function 的代碼:

   function sortSheets () {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();
  var obj = sheets.map(function(s) {
    var sheetName = s.getSheetName();
    var date = 0;
    if (sheetName != "Students") {
      var ar = sheetName.split("/");
      date = new Date(ar[4], ar[2], ar[2]).getTime();
    }
    return {sheet: s, converted: date};
  });
  obj.sort(function(a, b) {return a.converted > b.converted ? 1 : -1});
  obj.forEach(function(s, i) {
    ss.setActiveSheet(s.sheet);
    ss.moveActiveSheet(i + 1);
  });
}

我相信你的目標如下。

  • 電子表格中有以下表格。

     Pre-KF <--- hidden Pre-K <--- hidden KG <--- hidden Students 2022/01/19 - Suzie Q - G3 - T G3 2021/09/30 - Suzie Q - G3 - T G2 2021/05/10 - Suzie Q - G2 - T G2
  • 您想將2022/01/19 - Suzie Q - G3 - T G32021/09/30 - Suzie Q - G3 - T G22021/05/10 - Suzie Q - G2 - T G2的工作表排序為首字母的日期。

  • 在這種情況下,您要忽略隱藏的工作表和“學生”工作表。

為了達到你的目的,下面的修改怎么樣?

修改點:

  • 在包含日期的工作表名稱中,例如2022/01/19 - Suzie Q - G3 - T G3 但是在您的腳本中, var ar = sheetName.split("/"); date = new Date(ar[4], ar[2], ar[2]).getTime(); var ar = sheetName.split("/"); date = new Date(ar[4], ar[2], ar[2]).getTime(); 用於檢索日期。 在這種情況下, new Date(ar[4], ar[2], ar[2])返回Invalid Date
  • 在您的腳本中,“學生”工作表和隱藏工作表也用於對工作表進行排序。

當這些點反映在你的腳本中時,它變成如下。

修改后的腳本:

function sortSheets () {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();
  var obj = sheets.reduce(function(ar, s) {
    var sheetName = s.getSheetName();
    var hide = s.isSheetHidden();
    if (sheetName != "Students" && !hide) {
      var date = new Date(sheetName.split(" - ")[0]).getTime();
      ar.push({name: sheetName, sheet: s, converted: date, hide})
    }
    return ar;
  }, []);
  var diff = sheets.length - obj.length;
  obj.sort(function(a, b) {return a.converted < b.converted ? 1 : -1});
  obj.forEach(function(s, i) {
    ss.setActiveSheet(s.sheet);
    ss.moveActiveSheet(i + 1 + diff);
  });
}
  • 在此修改中,隱藏的工作表和“學生”工作表都被忽略了。
  • 修改了從工作表名稱解析日期的腳本。

筆記:

  • 在此修改后的腳本中,工作表名稱頂部的工作表排序如下。

     Pre-KF <--- hidden Pre-K <--- hidden KG <--- hidden Students 2022/01/19 - Suzie Q - G3 - T G3 2021/09/30 - Suzie Q - G3 - T G2 2021/05/10 - Suzie Q - G2 - T G2
  • 如果要按以下順序排序,

     Pre-KF <--- hidden Pre-K <--- hidden KG <--- hidden Students 2021/05/10 - Suzie Q - G2 - T G2 2021/09/30 - Suzie Q - G3 - T G2 2022/01/19 - Suzie Q - G3 - T G3
    • 請修改obj.sort(function(a, b) {return a.converted < b.converted? 1: -1}); to obj.sort(function(a, b) {return a.converted > b.converted? 1: -1}); .

參考:

我一直受到聖約翰縣的騷擾整個美國和另一個試圖卑鄙的人她跟着我穿過 state 線,包括聖約翰縣使用汽車所以它被鞭打到社會保障退伍軍人那里偷支票

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM