Loops 谷歌脚本-在电子表格中自动创建新工作表后,在预定义的单元格中设置公式
假设我有一张母版纸,名字在a列,链接在B列,从第2行开始。 我希望在母版图纸中添加的每一行自动:Loops 谷歌脚本-在电子表格中自动创建新工作表后,在预定义的单元格中设置公式,loops,google-apps-script,google-sheets,foreach,google-sheets-formula,Loops,Google Apps Script,Google Sheets,Foreach,Google Sheets Formula,假设我有一张母版纸,名字在a列,链接在B列,从第2行开始。 我希望在母版图纸中添加的每一行自动: 创建在A列中包含人员姓名的新工作表 在新创建的图纸中设置A和B的值 在C中设置我的导入公式 设置J2:J50中的连接公式 要点1。二,。我们工作得很好。第3点。四,。根本不工作,我会收到这样一条错误消息:TypeError:sheetNames.getRange不是函数 我不知道这有什么问题,但我很确定这是我把它们放在循环中的地方或其他地方造成的 有人能帮我吗 function createNewS
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('Liste de nageurs');
var values = masterSheet.getRange('A2:B' + masterSheet.getLastRow()).getValues();
// Imports table from link
var swimmerTable = '=IMPORTHTML(B1;"table";4)'
// Concatenates event with pool size
var fullName = 'CONCATENATE(C2;" - ";D2)'
// 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]);
// Sets the formula in the 3rd column:
sheetNames.getRange(1, 3).setFormula(swimmerTable)
// Sets the formula2 and iterates it from row 2 to row 50
sheetNames.getRange("J2:J50").setFormula(fullName)
}
});
}
试试这个:
const fullName = '=C2 & " - " & D2)';
// ...
const sheet = dataSheet.insertSheet(r[0]).appendRow(r);
// ...
sheet.getRange(1, 3).setFormula(swimmerTable);
sheet.getRange("J2:J50").setFormula(fullName);
可能的解决办法
我认为错误在这里:
dataSheet.insertSheet(r[0]).appendRow(r);
sheetNames.push(r[0]);
//在第3列中设置公式:
sheetNames.getRange(1,3).setFormula(可游泳)
//设置公式2并将其从第2行迭代到第50行
sheetNames.getRange(“J2:J50”).setFormula(全名)
既然你说你收到的错误是
TypeError:sheetNames.getRange不是函数
这似乎是因为变量sheetNames
可能如下所示:
["sheet1", "sheet2", ...]
这些只是“字符串”(纯文本),而不是图纸对象。所以他们没有方法getRange
您可以将其更改为:
var newSheet=dataSheet.insertSheet(r[0])
sheetNames.push(r[0]);
新闻纸.附录行(r);
newSheet.getRange(1,3).setFormula(可编辑)
newSheet.getRange(“J2:J50”).setFormula(全名)
在这里,您将dataSheet.insertSheet
的返回值分配给一个变量。此方法的返回值是新的图纸对象
总而言之,我相信在您的代码中,您将工作表名称(即文本)的概念与具有getRange
方法的工作表对象混为一谈
参考文献
const
类似于var
,但可以防止意外的重新分配。看,非常感谢!当你解释它的时候,它看起来很简单,最重要的是,它工作得很好。