相同的值在 if 条件下不匹配
Same values does not match in if condition
这是我第一次尝试 Google 表格脚本
我尝试比较两个 sheet 中第一列的每一行。
如果 sheet 1 中的任何值不在 sheet 2 中,我会将其添加到 sheet 2.
的末尾
这是代码,比较值永远不匹配,我尝试了 ==、===,有和没有 toSting()。我从来没有得到标志 found=1
,sheet1 col1 中的所有值都被复制到 sheet2 col1.
var ui = SpreadsheetApp.getUi();
var ss = SpreadsheetApp.getActiveSpreadsheet();
function Prueba2() {
var sheet = ss.getSheets()[0];
var rangeData = sheet.getDataRange();
sheet.getRange('A1').activate();
var lastRow = rangeData.getLastRow();
var searchRange = sheet.getRange(2,1, lastRow, 1);
var sheet2 = ss.getSheets()[1];
var rangeData2 = sheet2.getDataRange();
var lastRow2 = rangeData2.getLastRow();
var searchRange2 = sheet2.getRange(2,1, lastRow2, 1);
var l1= searchRange.getLastRow();
var l2= searchRange2.getLastRow();
var rangeValues = searchRange.getValues();
var rangeValues2 = searchRange2.getValues();
var found=0;
var arr = [];
// Loop through array and if condition met
for ( i = 0; i < lastRow - 1; i++){
found=0;
for ( j = 0 ; j < lastRow2 - 1; j++){
var vi=rangeValues[i];
var vj=rangeValues2[j];
if(rangeValues[i].toString() === rangeValues2[j].toString()){
found=1;
break;
};
};
if (found==0){
Logger.log(rangeValues[i]);
arr.push(rangeValues[i]);
};
};
var toAddArray = [];
for (k = 0; k < arr.length; ++k){
toAddArray.push([arr[k]]);
}
sheet2.getRange(lastRow2+1, 1, arr.length, 1).setValues(toAddArray);
};
编辑
这行得通,但我不知道为什么
for ( j = 0 ; j < lastRow2 - 1; j++){
var vi=rangeValues[i].toString();
var vj=rangeValues2[j].toString();
//if(rangeValues[i] === rangeValues2[j]){
if(vi===vj||vi==""){
found=1;
break;
};
};
这个修改怎么样? getValues()
检索到的值是二维数组。考虑到这一点,修改脚本。
模式 1:
如果你的脚本被修改了,这个修改怎么样?
发件人:
for ( i = 0; i < lastRow - 1; i++){
found=0;
for ( j = 0 ; j < lastRow2 - 1; j++){
var vi=rangeValues[i];
var vj=rangeValues2[j];
if(rangeValues[i].toString() === rangeValues2[j].toString()){
found=1;
break;
};
};
if (found==0){
Logger.log(rangeValues[i]);
arr.push(rangeValues[i]);
};
};
收件人:
for ( i = 0; i < lastRow - 1; i++){
found=0;
for ( j = 0 ; j < lastRow2 - 1; j++){
// var vi=rangeValues[i]; // This is not used in this script.
// var vj=rangeValues2[j]; // This is not used in this script.
if(rangeValues[i][0].toString() === rangeValues2[j][0].toString()){ // Modified
found=1;
break;
};
};
if (found==1){ // Modified
Logger.log(rangeValues[i][0]); // Modified
arr.push(rangeValues[i][0]); // Modified
};
};
- 根据您的情况,您可以将
if(rangeValues[i][0].toString() === rangeValues2[j][0].toString()){
替换为 if(rangeValues[i][0] === rangeValues2[j][0]){
。
模式二:
作为其他模式,这个修改怎么样?
发件人:
var found=0;
var arr = [];
// Loop through array and if condition met
for ( i = 0; i < lastRow - 1; i++){
found=0;
for ( j = 0 ; j < lastRow2 - 1; j++){
var vi=rangeValues[i];
var vj=rangeValues2[j];
if(rangeValues[i].toString() === rangeValues2[j].toString()){
found=1;
break;
};
};
if (found==0){
Logger.log(rangeValues[i]);
arr.push(rangeValues[i]);
};
};
var toAddArray = [];
for (k = 0; k < arr.length; ++k){
toAddArray.push([arr[k]]);
}
sheet2.getRange(lastRow2+1, 1, arr.length, 1).setValues(toAddArray);
收件人:
var toAddArray = rangeValues.filter(function(e) {return rangeValues2.some(function(f) {return e[0] && f[0] && e[0] == f[0]})});
sheet2.getRange(lastRow2+1, 1, toAddArray.length, 1).setValues(toAddArray);
注:
- 您添加的脚本
vi===vj
起作用的原因如下。
- 当
rangeValues[i].toString()
和rangeValues2[j].toString()
为运行时,一维数组转换为字符串,如["sample"]
到"sample"
。通过这个,vi===vj
有效。
参考文献:
如果我误解了你的问题,这不是你想要的结果,我深表歉意。
这是我第一次尝试 Google 表格脚本
我尝试比较两个 sheet 中第一列的每一行。
如果 sheet 1 中的任何值不在 sheet 2 中,我会将其添加到 sheet 2.
的末尾这是代码,比较值永远不匹配,我尝试了 ==、===,有和没有 toSting()。我从来没有得到标志 found=1
,sheet1 col1 中的所有值都被复制到 sheet2 col1.
var ui = SpreadsheetApp.getUi();
var ss = SpreadsheetApp.getActiveSpreadsheet();
function Prueba2() {
var sheet = ss.getSheets()[0];
var rangeData = sheet.getDataRange();
sheet.getRange('A1').activate();
var lastRow = rangeData.getLastRow();
var searchRange = sheet.getRange(2,1, lastRow, 1);
var sheet2 = ss.getSheets()[1];
var rangeData2 = sheet2.getDataRange();
var lastRow2 = rangeData2.getLastRow();
var searchRange2 = sheet2.getRange(2,1, lastRow2, 1);
var l1= searchRange.getLastRow();
var l2= searchRange2.getLastRow();
var rangeValues = searchRange.getValues();
var rangeValues2 = searchRange2.getValues();
var found=0;
var arr = [];
// Loop through array and if condition met
for ( i = 0; i < lastRow - 1; i++){
found=0;
for ( j = 0 ; j < lastRow2 - 1; j++){
var vi=rangeValues[i];
var vj=rangeValues2[j];
if(rangeValues[i].toString() === rangeValues2[j].toString()){
found=1;
break;
};
};
if (found==0){
Logger.log(rangeValues[i]);
arr.push(rangeValues[i]);
};
};
var toAddArray = [];
for (k = 0; k < arr.length; ++k){
toAddArray.push([arr[k]]);
}
sheet2.getRange(lastRow2+1, 1, arr.length, 1).setValues(toAddArray);
};
编辑
这行得通,但我不知道为什么
for ( j = 0 ; j < lastRow2 - 1; j++){
var vi=rangeValues[i].toString();
var vj=rangeValues2[j].toString();
//if(rangeValues[i] === rangeValues2[j]){
if(vi===vj||vi==""){
found=1;
break;
};
};
这个修改怎么样? getValues()
检索到的值是二维数组。考虑到这一点,修改脚本。
模式 1:
如果你的脚本被修改了,这个修改怎么样?
发件人:
for ( i = 0; i < lastRow - 1; i++){
found=0;
for ( j = 0 ; j < lastRow2 - 1; j++){
var vi=rangeValues[i];
var vj=rangeValues2[j];
if(rangeValues[i].toString() === rangeValues2[j].toString()){
found=1;
break;
};
};
if (found==0){
Logger.log(rangeValues[i]);
arr.push(rangeValues[i]);
};
};
收件人:
for ( i = 0; i < lastRow - 1; i++){
found=0;
for ( j = 0 ; j < lastRow2 - 1; j++){
// var vi=rangeValues[i]; // This is not used in this script.
// var vj=rangeValues2[j]; // This is not used in this script.
if(rangeValues[i][0].toString() === rangeValues2[j][0].toString()){ // Modified
found=1;
break;
};
};
if (found==1){ // Modified
Logger.log(rangeValues[i][0]); // Modified
arr.push(rangeValues[i][0]); // Modified
};
};
- 根据您的情况,您可以将
if(rangeValues[i][0].toString() === rangeValues2[j][0].toString()){
替换为if(rangeValues[i][0] === rangeValues2[j][0]){
。
模式二:
作为其他模式,这个修改怎么样?
发件人:
var found=0;
var arr = [];
// Loop through array and if condition met
for ( i = 0; i < lastRow - 1; i++){
found=0;
for ( j = 0 ; j < lastRow2 - 1; j++){
var vi=rangeValues[i];
var vj=rangeValues2[j];
if(rangeValues[i].toString() === rangeValues2[j].toString()){
found=1;
break;
};
};
if (found==0){
Logger.log(rangeValues[i]);
arr.push(rangeValues[i]);
};
};
var toAddArray = [];
for (k = 0; k < arr.length; ++k){
toAddArray.push([arr[k]]);
}
sheet2.getRange(lastRow2+1, 1, arr.length, 1).setValues(toAddArray);
收件人:
var toAddArray = rangeValues.filter(function(e) {return rangeValues2.some(function(f) {return e[0] && f[0] && e[0] == f[0]})});
sheet2.getRange(lastRow2+1, 1, toAddArray.length, 1).setValues(toAddArray);
注:
- 您添加的脚本
vi===vj
起作用的原因如下。- 当
rangeValues[i].toString()
和rangeValues2[j].toString()
为运行时,一维数组转换为字符串,如["sample"]
到"sample"
。通过这个,vi===vj
有效。
- 当
参考文献:
如果我误解了你的问题,这不是你想要的结果,我深表歉意。