Возникли проблемы с пользовательской функцией

Я конвертирую некоторые электронные таблицы из Excel в Google Sheets, и есть функция, которую я пытаюсь сделать, которая получает код и применяет функцию. Например, у меня есть список кодов в столбце и следующие 5 столбцов с текстами. Я хочу ввести =myFunction("code"), и я хотел бы вернуть значение с помощью этой формулы =vlookup(code;A1:F30;3;0), которая вернет столбец 3 со строкой, в которой находится код.

Я пробовал это:

function myFunc(code) {  
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var cell = sheet.getRange(getCell);
  var test = cell.setFormula('=VLOOKUP('+code+';a1:b10;2;0)')
  return test;
}

он говорит, что у меня нет разрешения на вызов setFunction,

function gettext(code) {
  var func = '=VLOOKUP("'+ code +'";\'VA-Texte\'!A1:I383;\'VA-Texte\'!E1;0)'; 
  return func;
}

он печатает точный код, который мне нужен, но не действует как формула.


person Alexandre    schedule 08.07.2019    source источник
comment
Добро пожаловать. В чем вопрос?   -  person Rubén    schedule 08.07.2019
comment
Спасибо, Рубен. Как я могу заставить функцию работать как ВПР, где я набираю =myFunction(3-123), и она возвращает столбец и строку, соответствующие этому коду?   -  person Alexandre    schedule 08.07.2019
comment
Вопрос слишком широкий. Вы уже прочитали developers.google.com/apps-script/guides/sheets/ функции?   -  person Rubén    schedule 08.07.2019
comment
Да, я отредактировал пост с некоторыми вариантами, которые пробовал, но безуспешно.   -  person Alexandre    schedule 08.07.2019
comment
Скрипт Google Apps не может оценивать формулы Google Sheets. В коде скрипта Google Apps используйте JavaScript вместо формул Google Sheets.   -  person Rubén    schedule 08.07.2019
comment
Спасибо за ваш ответ. Вы знаете, где я могу найти документацию по javascript для gsheets? Я немного разбираюсь в Javascript, но мне трудно поместить его в электронную таблицу.   -  person Alexandre    schedule 08.07.2019
comment
Для получения документации по JavaScript попробуйте developer.mozilla.org/en-US/docs/Web/ JavaScript также читайте Какую версию ECMA-262 поддерживает скрипт Google Apps?   -  person Rubén    schedule 08.07.2019
comment
@Alexandre Эти темы кажутся относящимися к вашему вопросу; возможно, ваш вопрос повторяется. Есть ли способ эмулировать Vlookup в скрипте Google? и Написание Google Javascript, аналогичного vlookup   -  person Tedinoz    schedule 11.07.2019


Ответы (1)


Ваш код не может быть оценен, потому что мы не знаем значение getCell.

В приведенном ниже коде «поиск» — это именованный диапазон. Диапазон — это ячейка E4, которая содержит значение «ghi», которое является поисковым запросом.

function test01(){

 var abc = "lookup";  
  so5693959103(abc);

}
function so5693959103(abc) {  
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetname = "56939591";
  var sheet = ss.getSheetByName(sheetname);

  // Lookup value is the named range = lookup which is found in E4
  var vlookupformula03 = "=VLOOKUP("+abc+",A1:B10,2,0)";

  //insert formula into cell E8
  var targetRange03 = sheet.getRange("E10");

  targetRange03.setFormula(vlookupformula03);
  Logger.log("DEBUG: result03 = "+targetRange03.getValue());

}

Скриншот Vlookup
Снимок экрана


Изменить

Эта версия будет работать для значения функции =mylookup("xxx"), где 'xxx' — это значение поиска. В приведенном ниже примере искомое значение — «ghi».


/*
Imitates the Vlookup function. Receives:
search - The desired value to look for in the column.
Once the cell of the [search] has been found, the returned parameter would be the value of the cell which is 1 cell to the right of the found cell.
*/
function mylookup(search) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetname = "56939591";
  var sheet = ss.getSheetByName(sheetname);
  var thevalue = search;
  var lastRow=sheet.getLastRow();
  var data=sheet.getRange(1,1,lastRow,2).getValues();

  for(i=0;i<data.length;++i){
    if (data[i][0]==thevalue){
      return data[i][1];
    }
  }
}

Функция поиска

скриншот mylooup

person Tedinoz    schedule 09.07.2019
comment
Спасибо за ваш ответ, Тединоз, но я искал, когда вы вводите ячейку, следуя вашему примеру, «= myFunction (ghi)», она возвращает «3». В вашем примере формула статична в ячейке «E10». Однако, спасибо. - person Alexandre; 10.07.2019
comment
Я могу дать вам =myFunction("ghi"), но не =myFunction(ghi). - person Tedinoz; 11.07.2019
comment
Идеально! Оно работало завораживающе. Я какое-то время не участвовал в этом проекте, поэтому я не пробовал его раньше, но он работал именно так, как я хотел. Большое спасибо Тединоз за вашу помощь. - person Alexandre; 17.08.2019