我是编码/ JavaScript的新手,所以如果这个问题(无意中)表达不当,我会提前道歉。我一直在寻找并发现了一些类似的问题,但没有解决我的问题。
我有一个场景,我有一个工作簿,其中包含一个名为“Data”的工作表,其中包含记录和列标题。还有另一张名为“Template”的表格,其中包含固定模板。我需要复制模板中的数据记录数量(即5个数据记录将创建4个原始模板的副本)。接下来,我需要将Data中的第一条记录添加到原始Template中的特定单元格区域,将Data中的第二条记录添加到第一个模板副本中的相同特定单元格区域等。
我已将脚本放到可以复制模板表的位置并将所有记录拉入数组中,但我无法弄清楚如何将第一条记录设置为原始模板,第二条记录到第二个模板等。非常感谢任何帮助!
function duplicate() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Data');
var startRow = 2; //first row
var lastRow = sheet.getLastRow();
var StartCol = 1
var LastCol = sheet.getLastColumn()
var numCol = sheet.getLastColumn();
var numRows = sheet.getLastRow(); // Number of rows to process
var dataRange = sheet.getRange(startRow, StartCol, numRows, numCol);
var data = dataRange.getValues();
//Duplicate Sheet based on # of Records
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName("Template");
for (i=1;i<numRows;++i) s.copyTo(ss).setName("Template "+i);
//A bad attempt at trying to add the records to each template copy
var nextSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Template "+i);
nextSheet.getRange(lastRow+1,1,numRows,numCol).setValues(data[0+1]);
}
答案 0 :(得分:1)
我不确定你想要什么,但我认为这会给你带来积极的推动。
function duplicate() {
var ss=SpreadsheetApp.getActiveSpreadsheet()
var sheet=ss.getSheetByName('Data');
var startRow = 2; //first row
var lastRow = sheet.getLastRow();
var StartCol = 1
var LastCol = sheet.getLastColumn()
var numCol = sheet.getLastColumn();
var numRows = sheet.getLastRow()-startRow+1; // Number of rows to process
var dataRange = sheet.getRange(startRow, StartCol, numRows, numCol);
var data = dataRange.getValues();
//Duplicate Sheet based on # of Records
var s = ss.getSheetByName("Template");
for (i=0;i<numRows;++i)
{
s.copyTo(ss).setName("Template " + Number(i+1));
s.getRange(startRow,startCol,numRows,numCol).setValues(data);
}
}
答案 1 :(得分:1)
如果我理解正确,您希望每个数据记录[行]都有自己的工作表,基于Template
,单个记录插入到每个记录的相同单元格范围内片
function duplicate() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Data");
// Get the Template sheet
var template = ss.getSheetByName("Template");
var startRow = 2; //first row
var lastRow = sheet.getLastRow();
var StartCol = 1;
var LastCol = sheet.getLastColumn();
var numCol = sheet.getLastColumn();
var numRows = sheet.getLastRow(); // Number of rows to process
var dataRange = sheet.getRange(startRow, StartCol, numRows, numCol);
var data = dataRange.getValues();
// The constant single column range to insert the data record into
var data_insert_range = sheet.getRange("C14:C22").getA1Notation();
// For each data record create a new sheet based on the template
// and insert into a pre-set range
data.forEach(function (e,i) {
var nextSheet = ss.insertSheet("Template Copy " + i, {template: template});
// Map each col of the record into it's own row
var dataRowIntoCol = e.map(function (c) { return [c] });
// Insert record into the desired column
nextSheet.getRange(data_insert_range).setValues(dataRowIntoCol);
});
}
我建议不要使用模板来复制和覆盖数据,而是建议保持Template
纯,并创建用于从中写入数据的新工作表。如果没有,只需将copyTo()
放回insertSheet()
代替var input1 = document.createElement("input");
var input2 = document.createElement("input");
var input3 = document.createElement("input");
input1.setAttribute("type","checkbox");
input2.setAttribute("type","checkbox");
input3.setAttribute("type","checkbox");
var br = document.createElement("br");
var text1 = document.createTextNode("option1");
var text2 = document.createTextNode("option2");
var text3 = document.createTextNode("option3");
var se = document.getElementById("container");
input1.appendChild(text1);
input2.appendChild(text2);
input3.appendChild(text3);
se.appendChild(input1);
se.appendChild(br);
se.appendChild(input2);
se.appendChild(input3);
,它也会以这种方式运作
编辑:更新了代码以反映明确的范围/数据信息