2016-10-01 5 views
-1

Эта проблема задана уже несколько раз. Но в приложении скрипта Google Apps я не могу решить эту проблему.Передача значения из одной функции в другую

function two() 
{ 
    var bridgeclubs = SpreadsheetApp.openById("1dfyI1jbz..........TVg4OoixKTz1"); 
    var bridgeclubs_sheet = bridgeclubs.getSheetByName("Sheet1"); 
    var data_bridgeclubs = bridgeclubs_sheet.getDataRange().getValues(); 
    var numRows = bridgeclubs_sheet.getDataRange().getNumRows(); 
    var sprshtname = SpreadsheetApp.getActiveSpreadsheet().getName(); 
    for (var i=1; i<=numRows; i++) 
    { 
    if (sprshtname == data_bridgeclubs[i][6]) 
    { 
     var A = i;   
     break; 
    } 
    } 
} 

В функции одного я делаю вызов функционировать два, где мне нужно это значение A:

function one() 
{ 
two(); 
//here I need this value A; 
var C= 35 * A;for instance 
} 

Кто может мне помочь?

+1

Не могли бы вы его вернуть? Если вы не выполняете асинхронные функции, вы можете установить 'one.A' – Artyer

ответ

3

Вы можете вернуть значение из функции с помощью return i; и получить его в пределах one по var A = two();.

function two() { 
    var bridgeclubs = SpreadsheetApp.openById("1dfyI1jbz..........TVg4OoixKTz1"); 
    var bridgeclubs_sheet = bridgeclubs.getSheetByName("Sheet1"); 
    var data_bridgeclubs = bridgeclubs_sheet.getDataRange().getValues(); 
    var numRows = bridgeclubs_sheet.getDataRange().getNumRows(); 
    var sprshtname = SpreadsheetApp.getActiveSpreadsheet().getName(); 
    for (var i=1; i<=numRows; i++) { 
     if (sprshtname == data_bridgeclubs[i][6]) { 
      return i; 
     } 
    } 
} 

function one() { 
    var C; 
    var A = two(); 
    if (A) { 
     C = 35 * A; 
    } 
} 
+1

Зачем мне устанавливать' A' и ломаться вместо того, чтобы просто возвращать 'A'? –

+0

@torazaburo Хорошая точка. – guest271314

+0

Спасибо большое torazburo, не знал смысла возврата (я просто стартер и уже 67 лет ...). Ваше решение работает! Это снова. – user3887038

0

Вы можете использовать глобальные переменные.

var A; 

function two() { 
    var bridgeclubs = SpreadsheetApp.openById("1dfyI1jbz..........TVg4OoixKTz1"); 
    var bridgeclubs_sheet = bridgeclubs.getSheetByName("Sheet1"); 
    var data_bridgeclubs = bridgeclubs_sheet.getDataRange().getValues(); 
    var numRows = bridgeclubs_sheet.getDataRange().getNumRows(); 
    var sprshtname = SpreadsheetApp.getActiveSpreadsheet().getName(); 
    for (var i=1; i<=numRows; i++) { 
     if (sprshtname == data_bridgeclubs[i][6]) { 
      A = i;   
      break; 
     } 
    } 
} 

function one() { 
    two(); 
    var C= 35 * A; 
} 
+0

На самом деле, это не ** лучший подход. Вот для чего нужны значения возвращаемой функции! –

+0

К сожалению, это решение не работает в среде сценариев google. Невозможно объявить значение отдельно от функции. – user3887038

+0

@torazaburo У вас есть право, но полезно знать больше решений вместо одного. Затем вы можете сравнить их и выбрать лучший. – PsychoX

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