For loop 使用母版图纸中的行数据自动创建新图纸
假设我有一张母版纸,名字在a列,链接在B列,从第2行开始 出于我不理解的原因,下面的代码只创建了一个第2行名称的新工作表,并在新创建的工作表中设置了第3行的值 我希望这项工作如下:For loop 使用母版图纸中的行数据自动创建新图纸,for-loop,google-apps-script,google-sheets,For Loop,Google Apps Script,Google Sheets,假设我有一张母版纸,名字在a列,链接在B列,从第2行开始 出于我不理解的原因,下面的代码只创建了一个第2行名称的新工作表,并在新创建的工作表中设置了第3行的值 我希望这项工作如下: 创建名称为a列的图纸 在新创建的图纸中设置A列和B列的值 有人能帮我弄清楚发生了什么事吗? 我阅读了关于循环和getRange的文档,但我搞不懂 多谢各位 function createNewSheets() { var dataSheet = SpreadsheetApp.getActiveSpreadsh
- 创建名称为a列的图纸
- 在新创建的图纸中设置A列和B列的值
function createNewSheets() {
var dataSheet = SpreadsheetApp.getActiveSpreadsheet();
var values = dataSheet.getSheetByName('mastersheet').getRange('A2:B').getValues();
// Get sheet with current swimmer name:
var sheet = dataSheet.getSheetByName(swimmerName);
var col = values[i]; // Current row
var swimmerName = col[0]; // swimmer name
// Iterate through all rows of data from "mastersheet":
for (var i = 1; i < values.length; i++) {
// Check if sheet with current swimmer name exists. If it doesn't it creates it:
if (!sheet) {
sheet = dataSheet.insertSheet(swimmerName);
}
// Sets current row of data to the new sheet:
sheet.getRange(1, 1, col.length, col[0].length).setValues(col)
}
}
函数createNewSheets(){
var dataSheet=SpreadsheetApp.getActiveSpreadsheet();
var values=dataSheet.getSheetByName('mastersheet').getRange('A2:B').getValues();
//获取包含当前游泳者姓名的工作表:
var sheet=dataSheet.getSheetByName(名称);
var col=值[i];//当前行
var swimername=col[0];//游泳者名称
//迭代“母版图纸”中的所有数据行:
对于(变量i=1;i
我相信你的目标如下
- 您希望从“母版”工作表的“A”列和“B”列中检索值
- 您希望使用从“mastersheet”工作表中检索到的列“A”的值作为工作表名称
- 当激活的电子表格中不存在检索到的图纸名称的图纸时,您希望插入具有图纸名称的新图纸
- 插入新图纸时,需要将图纸名称的同一行复制到插入的图纸
- 您希望使用谷歌应用程序脚本实现这一点
- 在你的剧本里
- 在
,var sheet=dataSheet.getSheetByName(swimername)
不是declaread。swimername
- 如果未在别处声明
,则此行将发生错误swimername
- 如果未在别处声明
- 在
处,未声明var col=values[i]
i
- 在for循环中,
- 第一个索引是
。从1
,在本例中,从第三行检索值getRange('A2:B')
和name
不会更改col
- 第一个索引是
- 在
- 为了实现您的目标,我想提出以下流程
- 检索当前图纸名称
- 从“母版”表中检索值
- 使用检索到的图纸名称和值,插入新图纸并放置值
- 在此示例脚本中,
在循环中增长,用于检查重复的图纸名称sheetNames
sheetNames.getRange(1,3).setFormula(sweeptable)
和sheetNames.getRange(“J2:J50”).setFormula(fullName)
。问题是它不再工作了。。我收到一条错误消息“TypeError:sheetNames.getRange不是函数”@Bastien Soret谢谢您的回复。我很高兴你的问题解决了。关于你的新问题,我也愿意支持你。但是,我不得不为我糟糕的英语水平道歉。不幸的是,我无法从你的回答中理解你的新问题。为了正确理解这个问题,我可以问你新问题的细节吗?通过这个,我想试着去理解它。没问题,谢谢你的帮助!在最初的代码中,我使用了两个公式。现在他们不再这样了。我应该把它们放在哪里才能工作?在你的第2点和第3点之间,我在上面的评论中声明了这两个公式。然后我将它们放在if语句中:values.forEach(r=>{if(!sheetNames.includes(r[0]){dataSheet.insertSheet(r[0]).appendRow(r);sheetNames.push(r[0]);sheetNames.getRange(1,3).setFormula(sweetTable)sheetNames.getRange(J2:J50”).setFormula(fullName)}
我的变量如下://从link变量导入table='=IMPORTHTML(B1;“table”;4)//使用池大小变量fullName='连接事件(C2;“-”D2)
@Bastien Soret感谢您的回复。我不得不再次为我糟糕的英语水平道歉。关于你的新问题,我仍然无法理解你的新问题的目标和你实现新问题的问题。但我愿意支持你,并试图理解你的新问题。当我能正确地理解它时,我想想出解决办法。所以,如果你能给我一个时间来理解你的新问题,我很高兴。很抱歉,我不能很快解决你的新问题。这是因为我的技术差。我再次为此深表歉意。
function createNewSheets() {
// 1. Retrieve the current sheet names.
var dataSheet = SpreadsheetApp.getActiveSpreadsheet();
var sheetNames = dataSheet.getSheets().map(s => s.getSheetName());
// 2. Retrieve the values from "mastersheet" sheet.
var masterSheet = dataSheet.getSheetByName('mastersheet');
var values = masterSheet.getRange('A2:B' + masterSheet.getLastRow()).getValues();
// 3. Using the retrieved sheet names and values, the new sheets are inserted and the values are put.
values.forEach(r => {
if (!sheetNames.includes(r[0])) {
dataSheet.insertSheet(r[0]).appendRow(r);
sheetNames.push(r[0]);
}
});
}