一段时间循环中的 IF 语句不起作用,我哪里出错了
IF statement in a while loop not working, Where am I going wrong?
所以我仍在学习Javascript并试图找到自己的方式。我正在努力工作,为我每周节省数小时的工作时间。
这是一个谷歌电子表格的脚本。它旨在查找列中的键值并相应地移动数据。然后,它应按区域将数据拆分为外部电子表格,并拆分为单独的选项卡。
我想我的拆分位是正确的,但它似乎不起作用的地方决定了什么应该移动,什么不应该移动。我很确定我的 While 循环有问题,也可能是 while 循环中的 if 语句有问题:(
如果有人能指出我的方式错误,我将不胜感激。这是完整的脚本。
唯一应移动的项目如下。如果列 AV = 需要删除详细信息,并且列 AW 不为空,AX 列不为空。和列 BC 不为空。然后应该将其推送到存档。
或
如果 AV 为空且aw 不为空且 bc 不为空。那么这也应该被推送到存档。
非常感谢
function testNinja(){
var sourceSheet = "Change of details requests";
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(sourceSheet);
var values = sheet.getDataRange().getValues();
var valuesLength = values.length;
var archive = [];
var counter = 1;
var agentSheet = "ID HERE";
// To make things easier, I've defined the worksheet names and the region names into arrays. Position is important, as entry 0 matches entry 0
var regionSheets = ["R/North East&Yorks","R/North West","R/South East","D/South London","D/East","D/North London","M/Midlands","M/Wales&S.West","M/Scotland/N.Ireland"];
var regionNames = ["North East & Yorks","North West","South East","South London","East England","North London","Midlands","Wales & S West","Scotland & N Ireland"];
// giving key columns & key values a var to save typing. Using column letters as var name.
var av = values[counter][47];
var aw = values[counter][48];
var ax = values[counter][49];
var bc = values[counter][54];
var bf = values[counter][57];
var bk = "Need to Remove Details";
var sf = "SET SF TASK";
// put matching values into an archive. This bit doesn't seem to be working correctly
while(counter < valuesLength)
{
if (bf == sf)
{
counter++;
}
if(av == bk && aw != "" && ax != "" && bc != "" || av == "" && aw != "" && bc !="")
{
archive.push(values.splice(counter, 1)[0]);
}
else
{
counter++;
}
}
// create a function called 'move' to move columns into new positions
Array.prototype.move = function (old_index, new_index) {
if (new_index >= this.length) {
var k = new_index - this.length;
while ((k--) + 1) {
this.push(undefined);
}
}
this.splice(new_index, 0, this.splice(old_index, 1)[0]);
}
//go through the archive, use the move function, and trim the end columns. Finally add a timestamp
var timestamp = new Date();
for (var i = 0;i<archive.length;i++)
{
archive[i].move(68,5);
archive[i].length = 73;
archive[i][61] = timestamp;
}
// Split the data by region. There is a region value in Column 65. This determinds what Sheet data is moved too.
var regionData = [];
var regionSs = SpreadsheetApp.openById(agentSheet);
for(var i = 0; i < regionSheets.length;i++){
var regionSheet = regionSs.getSheetByName(regionSheets[i]);
var regionName = regionNames[i];
for(var j = 0; j < archive.length;j++){
var value = archive[j][66];
if(value == regionName){
regionData.push(archive.splice(j, 1)[0]);
}
}
//Write data to sheet here.
var regionDataLength = regionData.length;
if (!regionDataLength) continue;
var lastRow = regionSheet.getLastRow();
var requiredRows = lastRow + regionDataLength - regionSheet.getMaxRows();
if (requiredRows > 0) regionSheet.insertRowsAfter(lastRow, requiredRows);
regionSheet.getRange(lastRow + 1, 1, regionDataLength, regionData[0].length).setValues(regionData);
// clear array for new region data
regionData = [];
// Get data validation from CC2, then apply to CC2:CC .
var CCrule = regionSheet.getRange("CC2").getDataValidation();
regionSheet.getRange("CC2:CC").setDataValidation(CCrule);
}
}
var counter = 1;
//...
var bf = values[counter][57];
//...
var sf = "SET SF TASK";
//...
while(counter < valuesLength)
{
if (bf == sf)
{
counter++;
}
//...
我认为问题在于对变量bf
(和其他变量)的赋值。您正在将values[1][57]
分配给bf
,因此在计数器增加时实际上并没有遍历列(如果values[1][57] != sf
,它永远不会)。
因此,如果您想使用列标识符来保存键入,我认为您需要在 while 循环中分配值,而不是在它之前。
试试这个if
:
if ((av == bk && aw != "" && ax != "" && bc != "") || (av == "" && aw != "" && bc !=""))
您必须在逻辑块两边加上括号,否则计算机无法知道如何对条件进行分组,在这种情况下,结果取决于运算符优先级。
编辑:我错了,在JS中&&
的优先级高于||
因此以编程方式不会更改任何内容,但是对于代码的清晰度和可读性而言
相关文章:
- reducers在redux中得到Function not Object,what'it’他错了
- 正在尝试为Docpad网站设置Lunr全文搜索插件.我做错了什么
- 谷歌关闭注释赢得'Don’不要告诉我;I’我错了
- Javascript对象/原型.我的理解错了吗
- 什么'这个随机数猜谜游戏错了
- 重新加载重复数据失败,我做错了什么
- 什么'这个谷歌脚本错了
- 柴如承诺即使错了也会过去
- 什么'Gulp错了
- 我做错了什么
- angular mongodb数组格式写错了
- JavaScript排序算法不起作用 - 任何明显的我做错了
- Google Apps 脚本为 getLastRow 抛出电子邮件失败通知,我做错了什么
- Javascript语法 - 我做错了什么
- 角度灯箱不起作用.我做错了什么
- 在这个猫鼬独特的保存前验证中,我做错了什么
- fullcalendar赢得't让我调整事件大小(光标不显示,我做错了)
- document.getElementById为空..什么'I’我的代码错了.
- Javascript-JSON.parse:数据意外结束-使用有效JSON时出错.我做错了什么
- 我做错了什么?405尝试保存值时出错