我正在尝试创建一个Google脚本来检查一张纸上一列中的数据是否与另一张纸上的另一列相同,我想出错的任何想法?
由于 :) 代码如下:
function myFunction() {
//data from Salesworks
var sheet = SpreadsheetApp.getActive().getSheetByName("Sales Works TEST");
var data_salesworks = sheet.getRange('D3:D121').getValues();
//data from Google Form
var sheet = SpreadsheetApp.getActive().getSheetByName("V3 New Form Responses");
var data_sheet = sheet.getRange('N3:N121').getValues();
if (data_salesworks = data_sheet){
Browser.msgBox('Date Range Correct');
}
else{
Browser.msgBox('Date Range Incorrect');
}
}
答案 0 :(得分:1)
使用getValues()
检索值时,值为2维数组。不幸的是,不能直接比较这种阵列。因此需要修改比较部分。我想针对这种情况提出以下两种模式。
在此模式中,每个数组都转换为字符串并进行比较。
function myFunction() {
//data from Salesworks
var sheet = SpreadsheetApp.getActive().getSheetByName("Sales Works TEST");
var data_salesworks = sheet.getRange('D3:D121').getValues();
//data from Google Form
var sheet = SpreadsheetApp.getActive().getSheetByName("V3 New Form Responses");
var data_sheet = sheet.getRange('N3:N121').getValues();
if (data_salesworks.toString() == data_sheet.toString()) {
Browser.msgBox('Date Range Correct');
} else {
Browser.msgBox('Date Range Incorrect');
}
}
在此模式中,使用“for loop”比较每个数组中的所有元素。
function myFunction() {
//data from Salesworks
var sheet = SpreadsheetApp.getActive().getSheetByName("Sales Works TEST");
var data_salesworks = sheet.getRange('D3:D121').getValues();
//data from Google Form
var sheet = SpreadsheetApp.getActive().getSheetByName("V3 New Form Responses");
var data_sheet = sheet.getRange('N3:N121').getValues();
var f = true;
for (var i=0; i<data_salesworks.length; i++) {
for (var j=0; j<data_salesworks[i].length; j++) {
if (data_salesworks[i][j] != data_sheet[i][j]) {
f = false;
}
}
}
if (f) {
Browser.msgBox('Date Range Correct');
} else {
Browser.msgBox('Date Range Incorrect');
}
}
这些样品必须满足以下条件。
如果我对你的问题的理解是错误的,请告诉我。我想修改它。
答案 1 :(得分:0)
......我在哪里做错了?
脚本中的一个错误在data_salesworks = data_sheet
上,因为单个=
用于将对象分配给变量。另一个错误是假设可以直接比较数组。
Google Apps脚本基于JavaScript。
getValues()返回一个二维数组,根据单元格的值和类型,每个成员都是一个JavaScript原始对象,换句话说,getValues()可以返回一个包含字符串,日期,数字和布尔值组合的数组。
在JavaScript上,直接比较两个数组并不起作用。有关详细信息,请参阅How to compare arrays in JavaScript?
考虑到上述情况,为了比较两个Google电子表格范围,首先我们可以比较范围大小是否相等,如果是,则比较第一个2D数组的每个innerst成员与第二个2D数组的相应成员。
在JavaScript上有两个相等运算符,抽象相等运算符==
和严格相等运算符===
。我们应该使用严格相等运算符来区分'2
(数字2为字符串)与2
(数字2为数字)之类的内容。
示例:
以下脚本包含两个功能。第一个设置要比较的电子表格范围的地址,第二个进行比较。
限制:此脚本不会比较单元格和内容格式,注释和数据验证,只是比较值。
function test(){
var address1 = 'A1:A3';
var address2 = 'B1:B3';
var output = compareRanges(address1,address2);
Logger.log(output);
}
function compareRanges(address1,address2){
var sheet = SpreadsheetApp.getActiveSheet();
var values1 = sheet.getRange(address1).getValues();
var values2 = sheet.getRange(address2).getValues();
if(values1.length === values2.length && values1[0].length === values2[0].length) {
for(var i = 0; i < values1.length; i++){
for(var j = 0; j < values2.length; j++){
if(values1[i][j] !== values2[i][j]) {
return false;
}
}
}
} else {
return false;
}
return true;
}