简体   繁体   English

谷歌表string.indexOf('string')无法正确返回

[英]google sheets string.indexOf('string') not returning correctly

I have been trying to write a script that will copy rows from one sheet to other sheets based on the responses to certain columns. 我一直在尝试编写一个脚本,该脚本将根据对某些列的响应将行从一张纸复制到另一张纸。 However I am running into problems with checking if a string var contains another string var. 但是,我在检查字符串var是否包含另一个字符串var时遇到问题。

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 prints 记录仪打印

[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

I have tried with and without .valueOf() for the strings. 我已经尝试过使用和不使用.valueOf()作为字符串。 Somewhat new to JS and completely new to Google Scripts so this may just be a simple fix but I'm not sure. JS有点新知识,而Google脚本则是全新知识,因此这可能只是一个简单的修复方法,但我不确定。 Any help is greatly appreciated. 任何帮助是极大的赞赏。

You shouldn't need to use valueOf() . 您不需要使用valueOf()

.getValues(); returns an array of arrays and you're targeting a specific child array with return values[lastRow - 1]; 返回一个数组数组,并且您要针对具有return values[lastRow - 1];的特定子数组return values[lastRow - 1]; , which is then assigned to v - based on the code you've shared. ,然后根据您共享的代码将其分配给v

Perhaps there's leading or trailing whitespace in the array values. 数组值中可能存在前导或尾随空格。 When called on an array indexOf() looks for an exact match (whitespace would mess that up) vs indexOf() on a string will return the start position of the string you're trying to match: 当在数组上调用indexOf()寻找完全匹配(空格会使它混乱)与字符串上的indexOf()会返回您要匹配的字符串的起始位置:

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

Perhaps v[0].indexOf() will fix the issue. 也许v[0].indexOf()将解决此问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM