【问题标题】:Script to Sort Sheets by Name in Google Sheets Spreadsheet在 Google 表格电子表格中按名称对表格进行排序的脚本
【发布时间】:2023-03-09 02:54:01
【问题描述】:

我使用 Google 表格电子表格来管理我正在处理的文件。在任何给定时间,我大约有 60-70 个文件,每个文件都有一个唯一的文件编号。每个文件在我的电子表格中都由一个以其文件编号命名的唯一工作表表示。文件编号符合以下格式:[#]-[##]-[####](例如 5-18-0040)。我还有一个名为“Files”的工作表,它是所有这些工作表和一些其他隐藏工作表的列表,其中包含操作。

我拼凑了一个脚本,我认为该脚本会通过增加文件号(例如 1-15-0023、2-16-1924、3-14-2012、5-17-0040)对这些工作表进行排序,然后推送文件表和那些隐藏的表开始。但是,它不起作用。它肯定会在一定程度上移动床单,但我最终还是会出现乱序的床单。

谁能看看这段代码并告诉我什么可能失败?例如,我是否需要将名称指定为整数(如果需要,如何指定?)还是有其他可能阻止此脚本工作的东西?

function sortSheets () {
  var sheetNameArray = [];
  var sheets = ss.getSheets(); 
  for (var i = 0; i < sheets.length; i++) {
    sheetNameArray.push(sheets[i].getName());
  }
  sheetNameArray.sort(); 
  for( var j = 0; j < sheets.length; j++ ) {
    ss.setActiveSheet(ss.getSheetByName(sheetNameArray[j]));
    ss.moveActiveSheet(j + 1);
  }
  ss.setActiveSheet(ss.getSheetByName("Files"));
  ss.moveActiveSheet(1);
  ss.setActiveSheet(ss.getSheetByName("Court Information"));
  ss.moveActiveSheet(2);
  ss.setActiveSheet(ss.getSheetByName("Timelines"));
  ss.moveActiveSheet(3);
  ss.setActiveSheet(ss.getSheetByName("Template"));
  ss.moveActiveSheet(4);
  ss.setActiveSheet(ss.getSheetByName("Sheet Operators"));
  ss.moveActiveSheet(5);
}

【问题讨论】:

  • 您是否查看了已排序的sheetNameArray 并确认它具有您想要的顺序? console.log(sheetNameArray); 会将其发送到 Stackdriver,您可以在其中更轻松地与多个日志进行交互。
  • 所以,在添加 console.log(sheetNameArray);它决定正常工作。它还决定在运行脚本后需要重新加载(可以理解),但它确实有效。认为我需要日志记录才能使其工作?也许这会减慢脚本的运行速度?
  • 不知道。请注意,您可以更简洁地编写最后一组:["Files", "Court Information" "Timelines", "Template", "Sheet Operators"].forEach(function (name, index) { ss.setActiveSheet(ss.getSheetByName(name)); ss.moveActiveSheet(1 + index); });
  • 永远学习。我是一个 JS hack,所以我开发的大部分东西都是 google-fu'ed 在一起的。我很欣赏这个提示并对其进行了重组。谢谢!保存时出现错误:“元素列表后缺少 ]。”有什么需要重做的吗?
  • 是的,我在"Court Information" 后面漏了一个逗号。代码不属于 cmets 是有原因的 ;)

标签: google-apps-script google-sheets


【解决方案1】:
function sortSheets () {
  var sheetNameArray = [];
  var sheets = ss.getSheets(); 

  if (sheets.length <= 2){
    return;
  }

  for (var i = 3; i < sheets.length; i++) {
    sheetNameArray.push(sheets[i].getName());
  }

  sheetNameArray.sort(); 

  for( var j = 0; j < sheetNameArray.length; j++ ) {
    ss.setActiveSheet(ss.getSheetByName(sheetNameArray[j]));
    ss.moveActiveSheet(j + 4);
  }
}

对于我的问题,我希望前 3 个保留下来,之后的任何工作表都进行相应的排序。这是一种更简洁的方式

【讨论】:

    【解决方案2】:

    无论出于何种原因,这段代码确实有效。也感谢@tehhowch 的帮助。

    【讨论】:

      猜你喜欢
      • 2014-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-06
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多