Google 脚本 - 每次都使用最新的 sheet

Google script - use every time the newest sheet

我想创建一个每次都使用最新的脚本 sheet。

sheet 从另一个组获取更新,如果我有事要做,我想创建一个电子邮件提醒。每次此传播sheet 从另一个团队获得更新时,他们会创建一个新的 sheet 并使用日期名称 (TT.MM) 并使旧的不可见。问题是这不是一个连续的时间,这是零星的。它根本不是创建新 sheet 的循环周期,有时它每天都创建,有时每周一次。因此我不能用 sheet.

的名称来调用它

如果我使用函数

  var sheet = spreadsheet.getActiveSheet();

它不起作用,因为最新的 sheet 不是活动的。

只需单击加号即可添加最新的 sheet(添加 sheet),旧的会被隐藏。

这是我的代码开始,代码有效,但我需要另一个函数来代替 spreadsheet.getSheetByName,它使用最新的 sheet 或第一个 sheet传奇之地

现在我有了 .getSheetbyName 函数,但是这个名称每次都在变化,我不知道下一个名称是什么。

function EmailAlert() {
  //Variable für das Google Sheet
  var spreadsheet = SpreadsheetApp.openById("18lvOFMBOIlXRrJcGbNZDabtH5tVNDvgMXgOaSrAIhpw");
  var sheet = spreadsheet.getSheetByName('15.03.'); 

谢谢朗加

3 月 17 日更新: these are the sheets

如果新的 sheet 作为最后一个插入(在下面的示例中 Sheet12

您可以尝试以下代码段:

function returnLastSheet() {
  let ss = SpreadsheetApp.openById('ID');
  let sheets = ss.getSheets();
  let lastSheet = sheets[sheets.length-1].getName();
  console.log(lastSheet);
}

如果新的 sheet 没有 作为最后一个插入,您可以创建一个新函数,将最后一个 sheet 设置为活动的,在插入新的 sheet 之前将是 运行。这样,手动插入新的sheet时,这就是最后一个

实际上,您无法通过它在 getSheets() 列表中的位置来判断最后隐藏的 sheet 是什么,因为其他用户可以移动它们。因此,您将不得不使用他们的 sheet 名称。 TT.MM 代表什么?

此函数查找所有 sheet 形式的 xx.yy,其中 xx 假定至少 1 位数字,可以是任何数字,也可以是 2 位数字。 yy也是一样。函数 returns 是 sheet 名称的字符串,其中 yy 位于小数点左侧。因此,比较 sheet 个名称,例如 01.03,02.03,03.03,31.02 将 return sheetname = "03.03".

这不要求您有前导零,但它允许。

function getHighestNumberedPage() {
  const ss = SpreadsheetApp.getActive();
  const shts = ss.getSheets().map((sh) => {
    let name = sh.getName();
    let rev = name.split(".").reverse().join(".");
    let v = rev.match(/\d{1,2}\.\d{1,2}/g);
    if (v && v.length == 1) {
      return sh.getName();
    } else {
      return '';
    }
  }).filter((n) => { return n }).sort((a, b) => {
    return parseInt(a.split(".").reverse().join(".")) - parseInt(b.split(".").reverse().join("."));
  });
  Logger.log(shts[shts.length - 1]);
  return shts[shts.length - 1];
}