2015-10-01 5 views
0

Я пытаюсь написать сценарий, который будет копировать строки из одного листа в другие листы на основе ответов на определенные столбцы. Однако у меня возникают проблемы с проверкой, содержит ли строка var другую строку var.google sheets string.indexOf ('string') неверно возвращается

function checkInterest(cell) 
{ 
// assumes source data in sheet named Needed 
// target sheet of move to named Acquired 
// test column with yes/no is col 4 or D 
ss = SpreadsheetApp.getActive() 
s = ss.getSheetByName('Form Responses 1'); 
r = s.getActiveRange(); 
i = s.getMaxRows(); 
v = lastValue('P'); 
addByInterest('Lighting','Lighting'); 
//addByInterest('Sound','Sound'); 
addHM(); 
} 

function lastValue(column) { 
var lastRow = SpreadsheetApp.getActiveSheet().getMaxRows(); 
var values = SpreadsheetApp.getActiveSheet().getRange(column + "1:" + 
column + lastRow).getValues(); 

for (; values[lastRow - 1] == "" && lastRow > 0; lastRow--) {} 
return values[lastRow - 1]; 
} 

function addByInterest(interest,sheetName) 
{ 
Logger.log(v); 
Logger.log('Lighting, Sound'.indexOf('Lighting')); 
Logger.log(v.indexOf(interest.valueOf())); 
if(s.getName() == 'Form Responses 1' && 
(v.indexOf(interest.valueOf()) >= 0)){ 
    var row = r.getRow(); 
    var numColumns = s.getLastColumn(); 
    var targetSheet = ss.getSheetByName(sheetName); 
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
    s.getRange(row, 1, 1, numColumns).copyTo(target); 
} 
} 
function addHM() 
{ 
Logger.log('RAN'); 
if(s.getName() == 'Form Responses 1' && 
(v.indexOf('Hair') >= 0 || v.indexOf('Makeup') >= 0)){ 
    var row = r.getRow(); 
    var numColumns = s.getLastColumn(); 
    var targetSheet = ss.getSheetByName('Hair & Makeup'); 
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
    s.getRange(row, 1, 1, numColumns).copyTo(target); 
} 
} 

Logger печатает

[15-10-01 12:14:27:346 EDT] [Lighting, Sound] 
[15-10-01 12:14:27:346 EDT] Lighting 
[15-10-01 12:14:27:347 EDT] 0.0 
[15-10-01 12:14:27:348 EDT] -1.0 //Should return greater than or equal to 0 
[15-10-01 12:14:27:349 EDT] RAN 

Я попытался с и без .valueOf() для строк. Несколько новый для JS и совершенно новый для Google Scripts, поэтому это может быть просто исправление, но я не уверен. Любая помощь очень ценится.

ответ

0

Вам не нужно использовать valueOf().

.getValues(); возвращает массив массивов, и вы ориентируетесь на конкретный массив ребенка с return values[lastRow - 1];, который затем назначен v - на основе кода вы совместно.

Возможно, в значениях массива есть ведущие или конечные пробелы. При вызове на массив indexOf() ищет точное совпадение (пробел будет беспорядок, что вверх) против indexOf() на строку вернет начальную позицию строки, которую вы пытаетесь соответствовать:

[" foo"].indexOf("foo"); // returns -1 due to the leading whitespace 
" foo".indexOf("foo"); // returns 1 

Возможно v[0].indexOf() будет исправить вопрос.

+0

Это исправило проблему. Спасибо! – khumps

+0

@ kumps, добро пожаловать. Рад, что он исправил проблему. – cssimsek

Смежные вопросы