[英]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.