我在Google Script中有一个数据数组(数组中大约有10个项目)。 如何在A列中搜索这些数组项? (例如:搜索从单元格a12开始到结束的项目)如果在A列中找不到数组值,那么将它们添加到A列的末尾?
我尝试使用
data[n][0].toString().match(values_array[i])==values_array[i]
第二次下次运行该功能时,我看到重复数据输入!
例如,从A1到A10的数据如下:(1,2,3,4,5,6,7,8,9,10) 第一次运行该功能时,它将所有数据添加到A列(开始a12)
第二次运行从A1到A10的相同数据的功能,它不应该输入任何东西,但它再次添加1,2,3,4,5,6,7,8,9,10!我不喜欢#39;不知道为什么这段代码就像这样!
如果专家告诉我如何修复此代码,我将不胜感激。谢谢。
function find2(){
var sheet = SpreadsheetApp.getActiveSheet(),
range,
values_array;
range = sheet.getRange('a1:a10');
values_array = range.getValues();
var sh = SpreadsheetApp.getActiveSheet();
var range2 = sh.getRange('a12:a')
data = range2.getValues(); // read all data in the sheet
var lastRowIndex=getLastColumnRow(0)
for (var i = 0; i < values_array.length; i++) {
for(n=0;n<data.length;++n){ // iterate row by row and examine data in column A
if(data[n][0].toString().match(values_array[i])==values_array[i]){
} else {
var lastEmptyRowIndex=1+lastRowIndex+i
SpreadsheetApp.getActiveSheet().getRange('a'+lastEmptyRowIndex).setValue(values_array[i]);
};
}//end of innter for loop
}// end of outer for loop
}
function setUp() {
ScriptProperties.setProperty('active', SpreadsheetApp.getActiveSpreadsheet().getId());
}
function getLastColumnRow(RowNumber) {
var ss = SpreadsheetApp.openById(ScriptProperties.getProperty('active'));
var sheet = ss.getSheetByName("Sheet1");
var data = sheet.getDataRange().getValues();
var numRows = data.length;
// loop from bottom to top for last row in given row "RowNumber"
while( data[numRows - 1][RowNumber] == "" && numRows > 0 ) {
numRows--;
}
return numRows
}
答案 0 :(得分:1)
您在此脚本中执行了许多不必要且令人困惑的步骤。
这就是为什么我选择不尝试修改你的功能,我希望你理解。 以下功能将满足您的需求
如果有很多行,可以通过对最后一行的二进制搜索进行优化,如果活动工作表只使用SpreadsheetApp.getActiveSheet().getLastRow()
,则可以优化它,如果这是唯一的范围,但对于大多数应用程序来说应该足够快。
function appender(){
var values_array = SpreadsheetApp.getActiveSheet().getRange('A1:A10').getValues();
var data = SpreadsheetApp.getActiveSheet().getRange('A12:A').getValues();
var toAdd = [];
for(var value in values_array){
for(var i = 0; i < data.length; ++i){
if(values_array[value][0] == data[i][0]){break;}
if(data[i][0] == ""){
toAdd.push(values_array[value]);
break;
}
}
}
if(toAdd.length > 0){
for(i = 0; i < data.length; ++i){
if(data[i][0] == ""){break;}
}
SpreadsheetApp.getActiveSheet().getRange(12 + i, 1, toAdd.length, 1).setValues(toAdd);
}
}