不久前,我问了一个类似的问题,涉及将某种颜色的标签移动到标签的末尾。该问题的答案是HERE

现在,我需要从不断增长的工作簿中删除所有这些选项卡。我还有另一本处理无效交易的工作簿,但是手动移动每个标签将花费很长时间。是否有与上述答案中的功能相似的功能,它将某种颜色的所有选项卡移至完全不同的工作簿中,还是我被手动执行?

这是我得到的代码:

function moveSheetsOfAColorToEnd(color) {
  var color=color || '#ff0000';
  if(color) {
    var ss=SpreadsheetApp.getActive();
    var shts=ss.getSheets();
    for(var i=0;i<shts.length;i++) {
      if(shts[i].getTabColor()==color) {
        Sheets.Spreadsheets.batchUpdate(
          {
            requests:[
              {
                "updateSheetProperties":
                {
                  "properties":
                  {
                    "sheetId":shts[i].getSheetId(),
                    "index": shts.length
                  },
                  "fields": "index"
                }
              }
            ]
          }, ss.getId());
      }
    }
  }
}


我真的不太了解javascript(如果是javascript),不足以理解什么。我猜想Sheets.Spreadsheets.batchUpdate{}中的位需要更改,但是我不知道将其更改为什么。

最佳答案

我不确定使用Sheets API背后是否有原因,但是您可以通过以下方式不使用Advanced Service来完成此操作:

(1)定义目标电子表格。例如,通过在代码顶部添加以下行(并将相应的id更改为您的代码)来添加open your spreadsheet by id

var dest = SpreadsheetApp.openById("your-destination-spreadsheet-id");


(2)使用copyTo(spreadsheet)将每个工作表复制到目标电子表格和deleteSheet(sheet)。因此,您应该更改此设置:

        Sheets.Spreadsheets.batchUpdate(
          {
            requests:[
              {
                "updateSheetProperties":
                {
                  "properties":
                  {
                    "sheetId":shts[i].getSheetId(),
                    "index": shts.length
                  },
                  "fields": "index"
                }
              }
            ]
          }, ss.getId());


对此:

        shts[i].copyTo(dest);
        ss.deleteSheet(shts[i]);


希望对您有所帮助。

关于javascript - 将特定颜色的每个选项卡移动到单独的工作簿,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59182077/

10-14 23:02
查看更多