我在Google电子表格中有一些客户数据,如下所示。定期添加新条目,我想使用脚本搜索联系号码列以检查新条目的联系号码是否已存在。 此外,如果可能的话,我希望脚本能够提供某种通知,指示现有条目的行号。例如,通知可以是一个新列,它只会写出"行号"或"未找到任何条目"。
可用数据:
Contact Number Email ID Venue Address Service Date
1234567890 Test1@gmail.com cypress 21/04/2016
0123456789 Test2@gmail.com river run drive 22/04/2016
我在寻找:
Contact Number Email ID Venue Address Service Date Duplicate entry in
1234567890 Test1@gmail.com cypress 21/04/2016 row1
0123456789 Test2@gmail.com river run drive 22/04/2016 no entries found
答案 0 :(得分:1)
因此,您的描述意味着您希望在输入之前搜索条目。而不是搜索重复项,这意味着您的数据中已存在重复的行。我已经为你构建了一个方法。
这显示了两者的示例,这将找到重复项,或者它将通过电话号码找到条目。逻辑和自定义的其余部分取决于您。
以下是此示例表:Example Spreadsheet
修改:添加了列查找逻辑,并添加了一个按钮,您可以按此按钮查看工作表中的重复项。 注意:您必须登录Google帐户才能运行
//Entry Point
function myFunction() {
var sheet = SpreadsheetApp.getActiveSheet(); //Get the current sheet
var dataRange = sheet.getDataRange();
var valuesRange = dataRange.getValues(); //The array of data on the sheet
var columns = GetColumns(valuesRange, dataRange.getNumColumns(), 0);
var duplicates = SearchForDuplicates(valuesRange, columns.columns['Contact Number'].index); //Search for existing duplicates
var elementIndex = SearchForValue(valuesRange, columns.columns['Contact Number'].index, 123456789); //Search for a phone number of 123456789
if(duplicates.length > 0){ //If there are duplicates
var isDuplicateColumn = columns.columns['Is Duplicate'].index;
for(var i = 0; i < duplicates.length; i++){
valuesRange[duplicates[i].index][isDuplicateColumn] = 'Yes'; //Assign Yes to the appropriate row
}
dataRange.setValues(valuesRange); //Set the spreadsheets values to that of the modified valuesRange
}
Logger.log(duplicates);
Logger.log(elementIndex);
}
//Searches an array for duplicate entries
function SearchForDuplicates(array, columnIndex){
var uniqueElements = {};
var duplicates = [];
for(var i = 0; i < array.length; i++){
if(typeof uniqueElements[array[i][columnIndex]] === 'undefined'){
uniqueElements[array[i][columnIndex]] = 0; //If the element does not yet exist in this object, add it
} else {
duplicates.push({row: array[i], index: i}); //If the element does exist, it's a duplicate
}
}
return duplicates;
}
//Searches an array for a value
function SearchForValue(array, columnIndex, value){
for(var i = 0; i < array.length; i++){
if(array[i][columnIndex] == value){
return i; //Element found, return index
}
}
return -1; //No element found, return -1
}
//Gets a columns object for the sheet for easy indexing
function GetColumns(valuesRange, columnCount, rowIndex)
{
var columns = {
columns: {},
length: 0
}
Logger.log("Populating columns...");
for(var i = 0; i < columnCount; i++)
{
if(valuesRange[0][i] !== ''){
columns.columns[valuesRange[0][i]] = {index: i ,value: valuesRange[0][i]};
columns.length++;
}
}
return columns;
}