Reputation: 91
Got this function which loops through a range and, when it finds a certain text in a cell, I want to get the value of the adjacent cell.
Can't seem to get it working, keep getting:
'TypeError: Cannot find function getvalue in object Range. (line 30, file "Code")Dismiss
Error.
Anyone help?
function Test (){
var mysheet="2016";
x=get(mysheet,"Interest");
}
function get(sheetname, txt) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetname)
var cellvalue;
var myval;
var startRow = 1; // First row of data to process
var numRows = 100; // Number of rows to process
var dataRange = sheet.getRange(startRow, 1, numRows, 26)
// Fetch values for each row in the Range.
var data = dataRange.getValues();
for (var i = 0; i < data.length; ++i) {
var row = data[i];
for (c=0; c< row.length; c++)
{
cellvalue = row[c];
// Logger.log ("Row: " + i + " Cell: " + c + " Cellvalue: " + cellvalue);
if (cellvalue == txt)
{
Logger.log ("Row: " + i + " Cell: " + c + " Cellvalue: " + cellvalue + "Myval: " + myval);
myval=sheet.getRange(i, c+1).getvalue();
}
}
};
};
Upvotes: 0
Views: 67
Reputation: 10259
The arrays are 0 bases, so you need to add to i & c to get the proper row and column. The length of row should be row[0].length. Also, once you find your value you can break the loop. Try this:
function Test (){
var mysheet="2016";
x=get(mysheet,"Interest");
}
function get(sheetname, txt) {
var sheet =
SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetname)
var cellvalue;
var myval;
var startRow = 1; // First row of data to process
var numRows = 100; // Number of rows to process
var dataRange = sheet.getRange(startRow, 1, numRows, 26)
// Fetch values for each row in the Range.
var data = dataRange.getValues();
for (var i = 0; i < data.length; ++i) {
var row = data[i];
for (c=0; c< row[0].length; c++)
{
cellvalue = row[c];
if (cellvalue == txt)
{
i=i+1
c=c+2
myval=sheet.getRange(i, c).getValue()
Logger.log( myval)
break
}
}
}
}
Upvotes: 0