【发布时间】:2021-09-30 12:39:03
【问题描述】:
总的来说,我是 stackover 流程和编码的新手。我整理了一个脚本,该脚本从数组中提取信息,该数组从主表中提取信息。脚本从模板中提取要提取的工作表类型,并根据数组数据对其进行填充。它适用于第一行数据,但我的变量在增量命令后没有更新,因此它卡在第一个条目上。抱歉,如果我解释得不好。 功能: 1.根据Arraydata第4行拉取房型 2.根据数组数据的第4行重命名 3.从Array数据的第4行填写数据 4.递增row变量,这样可以在第5行再次运行脚本,直到没有更多的数组数据。
为了安全,我已经替换了实际的工作表 ID
function createautomation() {
do{
var roomlist = SpreadsheetApp.getActiveSheet().getRange("Room List!A1:G100").getValues();
var i = 4
var ss = SpreadsheetApp.getActiveSpreadsheet();
var commissioning_template = SpreadsheetApp.openById('ID')
var roomtype = roomlist[i][5]
var copyroom = (`Copy of ${roomtype}`)
var ss = SpreadsheetApp.getActiveSpreadsheet();
var first = ss.getSheetByName(copyroom);
var roomname = roomlist[i][1]
var tab = (`${roomname} - ${roomtype}`)
var second = ss.getSheetByName(tab)
var room1 = (`${tab}!B1`)
var roomnum = (`${tab}!B2`)
var floor = (`${tab}!D2`)
var address = (`${tab}!B3`)
var siteName = (`${tab}!D3`)
var siteCode = (`${tab}!E3`)
var sourcenum = roomlist[i][0]
var sourceflr = roomlist [i][4];
//Copy The spreadsheet
commissioning_template.getSheetByName(roomtype).copyTo(ss);
//Rename Sheet
ss.getSheetByName(copyroom).setName(tab);
//Set Room Name
ss.getRange(room1).setValue(roomname);
//Set Room Number
ss.getRange(roomnum).setValue(sourcenum);
//Set Floor
ss.getRange(floor).setValue(sourceflr);
//Set Address
ss.getRange(address).setValue(roomlist[1][2]);
//Set Site Name
ss.getRange(siteName).setValue(roomlist[0][2]);
//Set Site Code
ss.getRange(siteCode).setValue(roomlist[2][2])
//increment the value of i
i++;
console.log(i)}
while(roomname !="")
}
【问题讨论】:
-
您需要将创建
var变量的代码移动到do循环内。您正在递增i,但每次迭代都没有获取索引项。 -
谢谢马克。因此,即使我将 do{ 放在脚本的最顶部,包括所有变量。它似乎仍然没有增加。我已经使用 do 循环更新了脚本以包含变量
-
如果您可以将数据安排在连续的单元格中,那么编码会有很大的好处,因为这样您就可以使用 setValues() 而不是几个 setValue()s
-
每次循环读取所有数据真的很慢。如果您还没有这样做,我强烈建议您重新考虑您的整个函数并花一些时间学习数组方法。
-
谢谢库珀!我将 var i = 4 排除在循环之外,这解决了这个问题。我正在使用数组数据精确地做到这一点,并且只增加数据行,因为这些列是其他单元格的来源。
标签: javascript google-apps-script google-sheets