Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript google sheets string.indexOf('string')未正确返回_Javascript_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript google sheets string.indexOf('string')未正确返回

Javascript google sheets string.indexOf('string')未正确返回,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我一直在尝试编写一个脚本,根据对某些列的响应,将行从一个工作表复制到其他工作表。然而,我在检查一个字符串变量是否包含另一个字符串变量时遇到了问题 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 = SpreadsheetAp

我一直在尝试编写一个脚本,根据对某些列的响应,将行从一个工作表复制到其他工作表。然而,我在检查一个字符串变量是否包含另一个字符串变量时遇到了问题

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);
}
}
记录器打印

[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脚本也完全陌生,所以这可能只是一个简单的修复,但我不确定。 非常感谢您的帮助。

您不需要使用valueOf

.getValues;返回一个数组数组,并且使用返回值[lastRow-1]将目标指向特定的子数组;,然后根据您共享的代码将其分配给v

数组值中可能有前导或尾随空格。在数组中调用indexOf查找精确匹配时,空格会弄乱字符串,而字符串中的indexOf将返回您尝试匹配的字符串的起始位置:

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

也许v[0].indexOf会解决这个问题。

解决了这个问题。非常感谢。