我有两张纸,一张是镜像纸“ Sheet2”,用于存储另一张纸“ Sheet1”的值。我的目标是让一个函数比较两个表的差异。我能想到的最好方法是将Sheet1的A列与Sheet2的A列进行比较。我找到了一些比较2列的函数,但它确实从一个列中查找值,然后在另一列中找到它。或者通过返回那些具有匹配值的单元格中的所有值,而不管它在哪一行中。但是我并不需要单元格中的值。我想找到两列停止匹配的第一行。我是Java语言的新手,所以我仍然无法理解整个for (var j = 0; j < range.length; j++)
的内容。
但是我确定我需要知道如何将其用于所需的功能。这是我尝试使用的方法,但没有给我行范围,而是给了我一个相同的值数组,如果我将其更改为if(lookup[i][0]!==range[j][0]){
,它给了我所有不匹配的可能组合。来自stackoverflow.com/questions/42044903
function findDifference() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s=ss.getSheetByName("Sheet1")
var lr=s.getLastRow()
var lookup = s.getRange(2,1,lr-1,2).getValues();
var s1=ss.getSheetByName("Sheet2")
var lr1=s1.getLastRow()
var range = s1.getRange(2,1,lr1-1,2).getValues();
var lookupRange = [];
for (var i = 0; i < lookup.length; i++) {
for (var j = 0; j < range.length; j++) {
var test=lookup[i][0]
if(lookup[i][0]!==range[j][0]){
lookupRange.push([range[j][0],range[j][1],lookup[i][0],lookup[i][1],]);
}}}
s1.getRange(10,1,lookupRange.length,4).setValues(lookupRange);
}
我觉得我想做的事情已经有一个非常相似的功能,但是我似乎找不到或想出它如何工作,因为我是新手并且不知道所有的花招。 像这样:
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s1=ss.getSheetByName("Sheet1")
var s2=ss.getSheetByName("Sheet2")
var ColumnA1 = s1.getRange('A:A').getValues()
var ColumnA2 = s2.getRange('A:A').getValues()
var Row = Function()
///Some function I can't think of using where
if(ColumnA1 + Row !== ColumnA2 + Row){
???.getRow()
}
答案 0 :(得分:0)
您使用的代码“很有帮助”,但是并不能解决您的特定问题。另一方面,您的if(ColumnA1 + Row !== ColumnA2 + Row){
也没有帮助。
遗憾的是,您确实需要“理解(var j = 0; j 在下面的答案中,基本上有三个要素。 循环浏览各行,并比较给定行中一张纸与另一张纸上的值。 如何找到两列停止匹配的第一行 您可以在代码 这是我的测试数据
for
语句表示循环i
只是一个计数器变量i=0
表示起始值为零。在javascript数组中,第一个值集始终为零。 i < Sheet1Data.length
表示循环将运行多少次。在这种情况下,它将在i小于数组中的行数时运行。记住,我从零开始,所以总行数“小于”就可以了。 i++
意味着每次代码循环时,i都会递增1。因此,i从0开始,然后是1、2、3,依此类推。
Logger.log
语句的第32和38行上看到。这些记录行号以及每个工作表中的行值是否匹配。
function so56195933() {
// setup Spreadsheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
// setup Sheet1
var s1 = ss.getSheetByName("Sheet1")
var s1LastRow = s1.getLastRow();
//Logger.log("DEBUG: Sheet 1 Last row = "+s1LastRow);
var Sheet1DataRange = s1.getRange(1,1,s1LastRow);
var Sheet1Data = Sheet1DataRange.getValues();
//Logger.log("DEBUG: Sheet 1 data range = "+Sheet1DataRange.getA1Notation());
var Sheet1length = Sheet1Data.length;
//Logger.log("DEBUG: Sheet1 length = "+Sheet1length);
// setup Sheet2
var s2=ss.getSheetByName("Sheet2")
var s2LastRow=s2.getLastRow();
//Logger.log("DEBUG: Sheet 2 Last row = "+s2LastRow);
var Sheet2DataRange = s2.getRange(1,1,s2LastRow);
var Sheet2Data = Sheet2DataRange.getValues();
//Logger.log("DEBUG: Sheet 2 data range = "+Sheet2DataRange.getA1Notation());
var Sheet2length = Sheet2Data.length;
//Logger.log("DEBUG: Sheet2 length = "+Sheet2length);
// Loop through rows compare value per each sheet
for (var i = 0; i < Sheet1Data.length; i++) {
var s1data = Sheet1Data[i][0];
var s2data = Sheet2Data[i][0];
//Logger.log("DEBUG: Line: "+i+", s1data: "+s1data+" Vs s2data: "+s2data);
if (s1data !=s2data){
// sheets values don't balance
Logger.log("Line: "+i+". Sheets are NOT equal. Sheet1 = "+s1data+", Sheet2 = "+s2data);
return false;
}
else
{
// sheets values balance
Logger.log("Line: "+i+". Sheets are equal, value: "+s1data);
}
}
}