Google apps script 如何生成图纸副本,每次使用循环更改单元格值?

Google apps script 如何生成图纸副本,每次使用循环更改单元格值?,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我对这玩意儿还不熟悉,但它太棒了!我曾与Excel和Vba一起工作,看到这个全新的世界,我感到非常兴奋 我的问题是:在Excel中,我有一个带有“模板”的文件。此模板链接到根据单元格值更改的数据。例如,在单元格K26中有一个键号;如果其值为1,则模板将显示与1相关的信息。如果是2,它将显示与2相关的信息,依此类推。有一个我想要生成的数字列表,因此当我运行代码时,模板将添加一个新的工作表,复制其当前值并粘贴到新工作表中,将工作表从“SheetX”重命名为cellK26的值,然后继续下一行 问题:我

我对这玩意儿还不熟悉,但它太棒了!我曾与Excel和Vba一起工作,看到这个全新的世界,我感到非常兴奋

我的问题是:在Excel中,我有一个带有“模板”的文件。此模板链接到根据单元格值更改的数据。例如,在单元格
K26
中有一个键号;如果其值为
1
,则模板将显示与
1
相关的信息。如果是
2
,它将显示与
2
相关的信息,依此类推。有一个我想要生成的数字列表,因此当我运行代码时,模板将添加一个新的工作表,复制其当前值并粘贴到新工作表中,将工作表从“SheetX”重命名为cell
K26
的值,然后继续下一行

问题:我想在drivesheets中也这样做,但不知道如何开始

我的模板工作表名为“Generador”,当前注册表位于单元格
K26
(这也是工作表的名称)。我要复制的范围是从
A1
I67
。如果可能的话,我想有一个新的工作簿,并在此工作簿中创建列表中的所有工作表。列表可以位于“列表”表中的任何位置

提前谢谢

编辑:

到目前为止,我的代码是: 基于

函数createEmployeeSheets(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
//获取存储员工数据的单元格范围。
var ssLista=ss.getSheetByName(“Lista”);
var rgEData=ssLista.getRange(2,1);
var eData=rgEData.getValue();//número de registros
var employeeDataRange=ssLista.getRange(2,1,eData,1);//第1列的名称为
var employeeObjects=employeeDataRange.getValues();
var template=ss.getSheetByName('Generador');
对于(var i=0;i
我已经成功地生成了每个工作表,更改了模板值的K3并对其进行了重命名。我遗漏了两件事:

我仍然得到一个错误:当代码开始生成工作表时,它继续运行,并且没有停在“列表”工作表的最后一行。例如,我有3行带有值,当循环转到4行时,它会显示错误行,因为它不能用空(null)命名工作表

另一件事是,我想在新工作簿中生成工作表,而不是在当前工作簿中。是否有一种方法可以在新图纸中创建这些图纸?考虑到信息与公式关联,因此它应该仅为值

谢谢。

试试这个:

函数的作用是:返回一个二维数组Objec[][]

function createEmployeeSheets() {
  var ss = SpreadsheetApp.getActive();
  var shLista = ss.getSheetByName('Lista');
  var rgEData = shLista.getRange(1,3);
  var eData=rgEData.getValue();//the number of names I think
  var employeeDataRange = ssLista.getRange(2,1,eData,1);//Sheet names in column1 starting from row2
  var employeeObjects = employeeDataRange.getValues();//sheet names in column 0
  var template=ss.getSheetByName('Generador');//template
  for (var i=0;i< employeeObjects.length; i++) {
    if(!ss.getSheetByName(employeeObjects[i][0])){
      template.getRange("K3").setValue(employeeObjects[i][0]);
      var sheet=ss.insertSheet(employeeObjects[i][0], {template:template});
    }
  }
}
函数createEmployeeSheets(){
var ss=SpreadsheetApp.getActive();
var shLista=ss.getSheetByName('Lista');
var rgEData=shLista.getRange(1,3);
var-eData=rgEData.getValue();//我认为的名称数
var employeeDataRange=ssLista.getRange(2,1,eData,1);//第1列中的工作表名称从第2行开始
var employeeObjects=employeeDataRange.getValues();//列0中的工作表名称
var template=ss.getSheetByName('Generador');//模板
对于(var i=0;i

此代码尚未测试。

谢谢。虽然您的代码似乎解决了二元酸范围的问题,但我仍然无法更改生成器表K3中的单元格值,即更改所有显示值的链接单元格。现在,我得到X份我的生成器工作表,没有任何更改,所有创建的工作表都命名为“Copy X of Generator”。我希望循环从单元格A2转到工作表“列表”的A(x),并每次将K3单元格从“生成器”更改;然后,使用当前信息创建工作表,并使用当前注册表重命名它。它令人沮丧,因为在VBA中它非常简单。
function createEmployeeSheets() {
  var ss = SpreadsheetApp.getActive();
  var shLista = ss.getSheetByName('Lista');
  var rgEData = shLista.getRange(1,3);
  var eData=rgEData.getValue();//the number of names I think
  var employeeDataRange = ssLista.getRange(2,1,eData,1);//Sheet names in column1 starting from row2
  var employeeObjects = employeeDataRange.getValues();//sheet names in column 0
  var template=ss.getSheetByName('Generador');//template
  for (var i=0;i< employeeObjects.length; i++) {
    if(!ss.getSheetByName(employeeObjects[i][0])){
      template.getRange("K3").setValue(employeeObjects[i][0]);
      var sheet=ss.insertSheet(employeeObjects[i][0], {template:template});
    }
  }
}