2017-07-11 51 views
1

我對Google Apps腳本非常陌生,而且在嘗試實現我的目標時遇到問題。如何複製用戶選擇的目標電子表格中的工作表並複製數據

我有一個谷歌表工作簿,可以讓用戶:

  1. 從下拉菜單中選擇一個名稱下(每個名字都有一個唯一/個人 谷歌工作簿與之相關聯的URL)
  2. 類型的所需的電子表格名稱
  3. 按下「推板」按鈕

一旦用戶按下按鈕,我試圖做到以下幾點:

  1. 重複片材「模板 - 不要修改」已經存在於目標工作簿(與所選擇的名稱相關聯的URL)
  2. 重命名複製片到所需的電子表格名稱
  3. 複製範圍A7 :D150從原始工作簿上的工作表「Tracker」到範圍A7:目標工作簿上D150新創建工作表

原始工作表設置爲讓用戶在運行腳本之前授權工作簿連接。

這裏是我的代碼:

function cloneGoogleSheet() { 

    var sheet = SpreadsheetApp.getActiveSheet(); 
    var name = sheet.getRange("B10").getValue(); 
    var url = sheet.getRange("f5").getValue();  
    var tss = SpreadsheetApp.openByUrl(url); 


    tss.setActiveSheet(tss.getSheetByName('Template - Do Not Modify')); 
    tss.duplicateActiveSheet(); 

    var activesheet = tss.getActiveSheet(); 
    activesheet.setName(name); 

} 

我的問題是:

  1. 它似乎並不像利用ActiveSheets是做這一切的一種安全的方式,並有一個更好的辦法。

  2. 當試圖使用URL變量(該腳本運行正常,具有硬編碼的URL值)時,我得到一個無效的參數:URL錯誤。單元格F5會根據從下拉列表中選擇的名稱更新爲新的URL,並使用查找引用具有唯一URL的名稱:

    = lookup(B4, {P71,P72,P73,P74,P75, P76,P77},{ Q71,Q72,Q73,Q74,Q75,Q76,Q77} )

  3. 鑑於這一事實,我使用所有這些ActiveSheet變量,我不知道如何找回我的原始工作表複製範圍。

我非常感謝有人向我展示了做到這一點的正確方法。謝謝!

回答

0

您是否嘗試過使用「getSheetByName」?

0

嘗試Armit阿加瓦爾對Duplicate a Sheet in Google Spreadsheets教程:

function cloneGoogleSheet() { 

    var name = "labnol"; 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName('Template').copyTo(ss); 

    /* Before cloning the sheet, delete any previous copy */ 
    var old = ss.getSheetByName(name); 
    if (old) ss.deleteSheet(old); // or old.setName(new Name); 

    SpreadsheetApp.flush(); // Utilities.sleep(2000); 
    sheet.setName(company); 

    /* Make the new sheet active */ 
    ss.setActiveSheet(sheet); 

} 
相關問題