我对这种Drivesheets并不陌生,但它很棒!我曾经与Excel和Vba一起工作过,很高兴看到这个全新的世界。
这是我的问题:在Excel中,我的文件带有“模板”。该模板链接到根据单元格值而变化的数据。例如,在单元格K26
中有一个密钥号;如果其值为1
,则模板将向您显示与1
相关的信息。如果是2
,它将向您显示与2
相关的信息,依此类推。这里有一个我要生成的数字列表,所以当我运行代码时,模板将添加一个新工作表,复制其当前值并将其粘贴到新工作表中,将该工作表从“ SheetX”重命名为单元格的值K26
,然后继续下一行。
问题:我想在驱动器表中做同样的事情,但不知道如何开始。
我的模板工作表称为“ Generador”,当前注册表在单元格K26
中(这也是工作表的名称)。我要复制的范围是从A1
到I67
。如果可能,我希望有一个新的工作簿,并在此工作簿中创建列表的所有工作表。该列表可以在“列表”表中的任何位置。
谢谢。
编辑:
到目前为止,我的代码: 基于this
function createEmployeeSheets() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
// Get the range of cells that store employee data.
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);//Nombres de hoja empezando en columna 1 desde fila 2
var employeeObjects = employeeDataRange.getValues();
var template = ss.getSheetByName('Generador');
for (var i=0; i < employeeObjects.length; i++) {
// Put the sheet you want to create in a variable
var sheet = ss.getSheetByName(employeeObjects[i]);
// Check if the sheet you want to create already exists. If so,
// log this and loop back. If not, create the new sheet.
if (sheet) {
Logger.log("Sheet " + employeeObjects[i] + "already exists");
} else {
template.getRange("K3").offset(0,0).setValue(employeeObjects[i]);
template.copyTo(ss).setName(employeeObjects[i]);
}
}
return;
i = 0;
}
我设法生成了每个工作表,更改了模板值的K3并将其重命名。我缺少两件事:
我仍然遇到一个错误:当代码开始生成工作表时,它继续进行,并没有停止在“列表”工作表的最后一行。例如,我有3个带有值的行,当循环进入4个行时,它显示错误行,因为它无法命名空白(空)。
另一件事是我想在新工作簿中而不是在当前工作簿中生成工作表。有没有办法可以在一个新表中创建这些表?考虑到信息是与公式链接的,因此应该仅是值。
谢谢。
答案 0 :(得分:0)
尝试一下:
getValues()函数返回2D数组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});
}
}
}
此代码未经测试。