我有一个脚本(Google Apps Script),从我的表格中提取数据(对,包括缩写和百分比),这个表格的数值是不断变化的(有时每周变化,有时每日变化)。脚本应该检查旧值与新值,并只处理新值,但由于某种原因它正在处理所有值。
在循环过程中,它首先找到与该单元格相关的电子邮件,然后向该人发送生成的电子邮件。最后,将新的值存储在之前找到的值上方。
获取新数据和变量。
从文档属性获取旧数据。
比较旧数据和新数据。
如何将旧数据存储到文档属性中。
在循环过程中,它首先找到与该单元格相关的电子邮件,然后向该人发送生成的电子邮件。最后,将新的值存储在之前找到的值上方。
获取新数据和变量。
var data = dataRange.getValues(); // Fetch values for each row in the Range.
var oldData = [{}];
//Declare variable
从文档属性获取旧数据。
var oldValues = PropertiesService.getDocumentProperties().getProperties();
//get values from document properties
var outerArrayOldData = [];
//empty array
var arr4 = [];
//empty array
var thisLoopString,
thisRowArray;
for (var key in oldValues) {
//grabbing keys from document properties 'row[i]' and loop for each
thisLoopString = oldValues[key];
thisRowArray = []; //Reset
array
thisRowArray = thisLoopString.split(","); //Convert the string to partial array
arr4.push(thisRowArray); //Push the inner array into the outer array
outerArrayOldData = arr4.concat(outerArrayOldData); //convert outer to actual usable array
var arr4 = []; //reset arr4 back to 0
};
//End getting old data
比较旧数据和新数据。
var oldData = outerArrayOldData;
var source = oldData.map(function (row) {
return JSON.stringify(row);
//map array to string
}),
searchRow,
dataLength = data.length;
for (i = 0; i < dataLength; i += 1) {
searchRow = JSON.stringify(data[i]);
if (source.indexOf(searchRow) == -1) {
//search old data and compare to new data using index search and if data isn't in old stack process it through functions
//doing stuff with new pairs
}
}
}
}
如何将旧数据存储到文档属性中。
var objOldData = {};
//empty
var keyName = "",
//empty
thisRowArray;
for (i = 0; i < data.length; i++) {
keyName = "row" + (i).toString();
//set keys
thisRowArray = data[i].toString();
//convert each pair array to string
if (thisRowArray == "") continue;
//skip blanks
objOldData[keyName] = thisRowArray;
//add keys and values to properties as a string
}
PropertiesService.getDocumentProperties().setProperties(objOldData,
true); //true deletes all other properties
//Store the Updated/New Values back to Properties
}
日志控制台:
<<<<<<<<Imported Range data>>>>>>>>
[[BBB, 0.9], [CCC, 0.76], [DDD, 0.89], [, ]]
<<<<<<<<Old data from dpcument properties>>>>>>>>
[[DDD, 0.89], [, ], [BBB, 0.9], [CCC, 0.76]]
<<<<<Processing New Values Not in Old Data>>>>>
[CCC, 0.76]
[BBB, 0.9]
[DDD, 0.89]
<<<<<<<<Store the Updated/New Values back to Properties>>>>>>>>
{row1=CCC,0.76, row0=BBB,0.9, row3=,, row2=DDD,0.89}
正如您所看到的,即使这些值已经存在于系统中且不是新的,它仍在处理所有值。为什么搜索没有发现它们已经存在?我在哪里出了问题?
source
只是要搜索的旧数据字符串。 - hakarunesource:[["DDD","0.89"],["",""],["BBB","0.9"],["CCC","0.76"]]
&&searchRow: undefined
&&DataLength: 4.0
。 - hakarune