当前位置: 首页 > 知识库问答 >
问题:

试图编辑谷歌工作表按字母顺序排列工作表脚本,将特定的命名工作表放在其余工作表的前面

司空宣
2023-03-14

好的,我有一个工作脚本,可以将电子表格中的工作表按字母顺序移动。然而,我有几个工作表,我不想从电子表格中的前两个工作表中移动,名为“索引”和“模板”。现在,只要我把它们放在前两个点,脚本就会忽略它们,然后按字母顺序排列,但是如果它们不在前两个点,它们就会在末尾结束,因为其他纸张在它们前面按字母顺序排列。为了防止有人在第一个点添加一个表或以其他方式移动索引或模板表,我希望他们自动移回前两个地方,所有其他表随后按字母顺序排列。

我不知道在代码中,我需要将索引和模板移动到前两个位置。

目前的代码,与链接,我基于它的大部分。

//https://support.google.com/docs/thread/2806598/any-way-to-sort-sheets-in-alphabetical-order-in-my-workbook?hl=en

function sortSheetsByName() {
  var aSheets = new Array();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var allsheets = ss.getSheets();
  for (var s in allsheets)
  {
    var ss = SpreadsheetApp.getActive();
  
  
    var sheet = allsheets[s];
    if(
       (sheet.getName() == "Index") || 
       (sheet.getName() == "Template") 
      ) continue;
    aSheets.push(ss.getSheets()[s].getName());
  }
  if(aSheets.length)
  {
    aSheets.sort();
    for (var i = 0; i < aSheets.length; i++)
    {
      var theSheet = ss.getSheetByName(aSheets[i]);
      if(theSheet.getIndex() != i + 3) //This was i + 1, changing it to 3 starts from third sheet
      {
        ss.setActiveSheet(theSheet);
        ss.moveActiveSheet(i + 3);  //This was i + 1, changing it to 3 starts from third sheet
      }
    }
  }
}

我正在尝试的一些代码片段:

var indexSheet = ss.getSheetByName("Index")
ss.moveActiveSheet(1);
var templateSheet = ss.getSheetByName("Template")
ss.moveActiveSheet(2);
// Stop iteration execution if the condithtml" target="_blank">ion is meet.
    if(
       (sheet.getName() == "Index") || 
       (sheet.getName() == "Template")
      ) continue;

编辑:与答案,并使变量更容易能够改变的名称,其中表不应该包括在字母化,我们有:

var firstSheet = "Index";
var secondSheet = "Template";

function sortSheetsByName() {
  var aSheets = new Array();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var allsheets = ss.getSheets();
  for (var s in allsheets)
  {
    var ss = SpreadsheetApp.getActive();
  
  
    var sheet = allsheets[s];
    if(
       (sheet.getName() == firstSheet) || 
       (sheet.getName() == secondSheet) 
      ) continue;
    aSheets.push(ss.getSheets()[s].getName());
  }
  if(aSheets.length)
  {
    ss.getSheetByName(firstSheet).activate()
    ss.moveActiveSheet(1)
    ss.getSheetByName(secondSheet).activate()
    ss.moveActiveSheet(2)
    aSheets.sort();
    for (var i = 0; i < aSheets.length; i++)
    {
      var theSheet = ss.getSheetByName(aSheets[i]);
      if(theSheet.getIndex() != i + 3)
      {
        ss.setActiveSheet(theSheet);
        ss.moveActiveSheet(i + 3);
      }
    }
  }
}

共有1个答案

符允晨
2023-03-14

您需要在移动工作表之前激活它们,而不仅仅是获取工作表对象。

在最后的if(aSheets.length)条件之后,需要添加以下行:

js prettyprint-override">ss.getSheetByName("Index").activate()
ss.moveActiveSheet(1)
ss.getSheetByName("Template").activate()
ss.moveActiveSheet(2)
  • 类表-激活()|应用脚本|Google Developers
  • 类电子表格-moveActiveSheet(pos)|应用脚本|Google Developers
 类似资料:
  • 我想不断更新/重写到谷歌表。不过,我不能只是更新它,而不清除旧的工作表,因为有时更新的行比之前的行和旧的行留在工作表中。 因此,开发者页面上列出的协议是: 翻译成python会是这样的,我认为: 返回错误: GoogleapClient。错误。HttpError:https://sheets.googleapis.com/v4/spreadsheets/[uniqueIDhere]/values:

  • 通过SpreadsheetApp global,使用绑定到电子表格的应用程序脚本来影响工作表非常简单。但是,有一些功能,例如在工作表上获取/设置过滤器,只能从GoogleSheetsRESTAPI访问。 我见过一个例子,它使用应用程序脚本中的UrlFetchApp来调用谷歌工作表应用编程接口,但它的编写方式好像应用程序脚本实际上没有绑定到特定的电子表格。 当我试图从绑定到电子表格的应用程序脚本中调

  • 您好,我正在为D制作一张计划表 我正在尝试编写一个脚本,它将自动隐藏PlayerSheet中所有空的“initiative”单元格。我已经成功地编写了这个脚本,但是我希望它在我编辑MainSheet时触发。因为工作表中的所有日期都来自于使用IMPORTRANGE,所以我无法使用on edit触发器,因为PlayerSheet从未被编辑过。 每当我编辑MainSheet时,是否可以让位于Player

  • 我尝试使用“读取多个范围”示例: https://sheets.googleapis.com/v4/spreadsheets/{SpreadsheetID}/values:batchGet?范围=表1!B:B 来自:Google Sheets API v4示例我用我的电子表格ID替换了"spreadsheetId"。但当我发送GET请求(通过邮递员)我收到: 比我以前https://develop

  • 读取文件已支持 windows 系统,版本号大于等于 1.3.4.1; 扩展版本大于等于 1.3.2; PECL 安装时将会提示是否开启读取功能,请键入 yes; 函数原型 sheetList(): array 示例 $excel = new \Vtiful\Kernel\Excel(['path' => './tests']); ​ // 构建示例文件 $filePath = $excel

  • 我正在重新创建和扩展我以前制作的文档。我已经引入了我最初使用的脚本,并在我认为合适的地方对其进行了调整,以使其在本表中正常工作,但我一定错过了一些东西。可在此处找到涉及的3个电子表格文件的可编辑示例。这些文件是一个样本“价目表”、“目录”(它汇总了所有价目表中的制造商名称,还有一个“目录”选项卡,用于我的一个主要供应商未销售的杂项物品),以及“附录B”,这是我需要帮助的文件。 这份文件是我合同的增