【发布时间】:2021-09-24 13:05:46
【问题描述】:
我正在尝试使用谷歌表格和谷歌应用脚本创建一个杂货成本划分系统来创建它。我在尝试使用嵌套在 for 循环中的 switch 语句时遇到问题,该循环遍历与特定购买相关的所有人员并根据他们的姓名进入案例,然后将值添加到另一个包含总购买量的工作表。
for (var i = 1; i < 6; i++) {
people.push(data[i][0]);
values.push(data[i][1]);
if(values[i-1] != 0.0){
var splits = (data[i][2]);
splits = splits.split(',');
var splitprice = values[i-1].toFixed(2);
Logger.log(`Values: ${values[i-1]} splits: ${splits} split length: ${Object.keys(splits).length} Split Price: ${splitprice}`);
switch (people[i-1]) {
case 'Aiden':
Logger.log('In Aiden case: '+splits);
Aiden(splits,splitprice);
return;
case 'Ben':
Logger.log('In Ben case: '+splits);
Ben(splits,splitprice);
break;
case 'Joe':
Logger.log('In Joe case: '+splits);
Joe(splits,splitprice);
break;
case 'Malcolm':
Logger.log('In Macolm case: '+splits);
Malcolm(splits,splitprice);
break;
case 'Marcel':
Logger.log('In Marcel case: '+splits);
Marcel(splits,splitprice);
return;
}
}
}
在此代码中,它会检查与购买者对应的单元格,并通过 switch 语句根据人输入正确的函数。
function Aiden(splitbtwn,total){
for(var j=0; j <= splitbtwn.length + 1; j++) {
var splitprice = (total/(splitbtwn.length + 1)).toFixed(2);
switch (splitbtwn[j]) {
case "All":
splitbtwn = "Ben,Joe,Malcolm,Marcel";
splitprice = (total/5);
case "Ben":
for(var k = 3; k < 1000; k++) {
var Ben2Aid = ('Payables!F' + k)
var checker = sheet.getRange(Ben2Aid).isBlank();
if (checker) {
SpreadsheetApp.getActiveSpreadsheet().getRange(Ben2Aid).setValue(splitprice);
break;
}
}
case "Joe":
for(var k = 3; k < 1000; k++) {
var Joe2Aid = ('Payables!K' + k)
var checker = sheet.getRange(Joe2Aid).isBlank();
if (checker) {
SpreadsheetApp.getActiveSpreadsheet().getRange(Joe2Aid).setValue(splitprice);
break;
}
}
case "Malcolm":
for(var k = 3; k < 1000; k++) {
var Mal2Aid = ('Payables!P' + k)
var checker = sheet.getRange(Mal2Aid).isBlank();
if (checker) {
SpreadsheetApp.getActiveSpreadsheet().getRange(Mal2Aid).setValue(splitprice);
break;
}
}
case "Marcel":
for(var k = 3; k < 1000; k++) {
var Mar2Aid = ('Payables!U' + k)
var checker = sheet.getRange(Mar2Aid).isBlank();
if (checker) {
SpreadsheetApp.getActiveSpreadsheet().getRange(Mar2Aid).setValue(splitprice);
return;
}
}
}
}
}
每个人都有自己的函数,该函数使用参数调用,以查看分配给谁。我的问题是它在第二个函数中执行每个单独的 switch 案例,而不是根据 splitbtwn 变量执行与案例相对应的案例,该变量是一个数组,拥有其拆分对象的名称。任何帮助将不胜感激。
【问题讨论】:
-
checker是否曾经true? -
Checker 在被选中放置 splitprice 值的单元格为空时为真,否则为假。这用于确保它不会覆盖现有单元格。
标签: javascript google-apps-script google-sheets switch-statement