我试图比较一个较大的列/数组与一个较小的列/数组,看看较小的列值是否包含在较大的数组中。该脚本查看4个不同的列(支票编号和支票金额),并尝试找出行位置,其中:
C列中的支票号码不匹配
C中的支票号码匹配,但D列中的金额不相同
当数组进行比较,他们是完全相同的,只有1或2个手动更改正在进行的代码工作完美的罚款。但我需要检查cashedCheck表与OpenCheck表进行比较,并找到差异(如果有的话)。目前,C列中正确的支票号码从未被视为正确,它将CashedCheck表的整个长度视为无效(如在我的控制台日志中所见),我不确定我做错了什么。正如你在屏幕截图中看到的,两个表的值彼此非常不同,但有些值确实匹配,我试图找到哪些行在D列或C列中具有不同的值。
下面是代码
function CHK_BothChecks_V5_StackOverFlow() {
const ss = SpreadsheetApp.getActive();
const sh1 = ss.getSheetByName("OpenChecks");
const sh2 = ss.getSheetByName("CashedChecks");
var rg1 = sh1.getRange("C1:D" + sh1.getLastRow()).getValues();
var rg2 = sh2.getRange("C1:D" + sh2.getLastRow()).getValues();
var correctChecks = 0;
var invalidChecks = 0;
var invalidAmounts = 0;
for (var i = 0; i < rg2.length; i++) {
if (rg1[i][0] == rg2[i][0]) {
correctChecks++;
}
if(rg1[i][0] == rg2[i][0] && rg1[i][1] !== rg2[i][1]) {
invalidAmounts++;
var amtIndex = sh1.getRange(i + 1, 2).getRow();
console.log("Incongruent amound found at row " + amtIndex);
} if (rg1[i][0] !== rg2[i][0]) {
var index = sh1.getRange(i + 1, 2).getRow();
invalidChecks++;
console.log(index);
}
}
console.log("Total number of valid check numbers is " + correctChecks);
console.log("Total number of invalid check numbers is " + invalidChecks);
console.log("Total number of invalid amounts is " + invalidAmounts);
}
1条答案
按热度按时间ct3nt3jp1#
您要将“已兑现”支票与“未兑现”支票进行匹配。
correctChecks
invalidAmounts
invalidChecks
OP的想法是正确的--循环检查,但检查在两个列表中的同一行上的可能性非常小。最好使用替代方法来查找匹配项。
解决方案使用
indexOf