重复的工作表,副本位于原始文件旁边

时间:2019-05-10 19:58:43

标签: google-apps-script google-sheets

我有一个脚本可以在同一电子表格中复制工作表:

function duplicateSheet() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var devis = ss.getActiveSheet();
devis.copyTo(ss).setName('CopyDevis');

它工作正常,但是复制选项卡在电子表格的最右侧创建。这是一个问题,因为我有很多选项卡,并且我必须转到最右边,然后再将其移回左边。我想在原件旁边创建副本。

我知道moveActivesheet函数,但是我不想使用它,因为它使我不得不激活副本(setActivesheet)-由于某种原因,我希望在不更改活动表的情况下完成该过程。

因此,我调查了getIndex()(它将告诉我活动工作表的位置并在其旁边创建副本-但CopyTo不允许使用此变量(我认为)。

InsertSheet()无效,因为它将使新工作表处于活动状态。

任何帮助将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:0)

将最后一个工作表移动到活动工作表的右侧

在电子表格上创建重复项时,它会立即在活动工作表的右侧创建它。但是,如果您将其创建为正确端的最后一个。然后,此功能将完成您​​所请求的操作。

function moveLastSheetOnePositionToRightOfTheActiveSheet() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var actidx=sh.getIndex();
  var shts=ss.getSheets();
  if(sh) {    
    Sheets.Spreadsheets.batchUpdate(
      {
        requests:[
          {
            "updateSheetProperties": 
            {             
              "properties":
              {
                "sheetId":shts[shts.length-1].getSheetId(),
                "index": actidx
              },
              "fields": "index"                      
            }
          }
        ]
      }, ss.getId());
  }
}