Получить диапазон от GetRangeByName, активировать диапазон

Моя цель состоит в том, чтобы автоматизировать добавление 10 строк в лист Google, используемый бизнесом некоммерческой организации, а затем реплицировать последовательности формул, необходимые во вновь создаваемых строках. У меня был весь код, работающий, чтобы выполнить задачу и не дать пользователям испортить формулы электронных таблиц, когда они вручную вставляют строки. Однако время выполнения кода истекло из-за количества строк в электронной таблице с использованием цикла getRange (). Мой новый подход состоит в том, чтобы перейти к именованной ячейке в качестве отправной точки вместо действительно медленного циклического поиска ячейки.

Я создал имя «EndData», прочитал все, что я могу найти в сети, пробовал и несколько часов ошибался в синтаксисе, чтобы ввести диапазон named_cell в myrange, а затем активировал диапазон на рабочем листе ...

Вот текущая попытка кодирования (которая оставляет курсор в верхней части столбца и

"TypeError: Не удалось найти функцию getRangeByName в объекте Sheet. (Строка 170, файл" macros ")"

//Get EOD range, select, index up 3 rows to start row insertions
function getEOD() {
 var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
 Logger.log(ss);  //lOG is not helpful, says, "sheet", not SheetName
 var MyRange = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRangeByName("EndData"); 
 Logger.log(MyRange);  //lOG is not helpful, says, "Range", not RangeAddress
 //Activate the named cell, moves with the spreadsheet
 MyRange.activate();
};

У меня появилась новая идея после того, как я попросил помощи, вот рабочий код, который выполняет работу:

    //Get EOD range, select, index up 3 rows to start row insertions
    function getEOD() {
      var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
      //Logger.log(ss);  //lOG is not helpful, says, "sheet", not SheetName
      var rg = SpreadsheetApp.getActiveSpreadsheet().getRangeByName('EndData');
      if (rg != null) {
        Logger.log(rg.getNumColumns());
      }
      //Logger.log(rg);  //lOG is not helpful, says, "Range", not RangeAddress
      //Referenced the Named the EOD cell
      //Future, Trying to create a debug status bar  
      //SpreadsheetApp.getActiveSpreadsheet().toast("looking at row" & i "now")
      //Activate the named cell, which moves with spreadsheet growth, down
      rg.activate();
      //Uncomment for testing purposes, places a Yes on the row 4 columns over
      //sheet.setActiveRange(sheet.getRange(0, 4)).setValue('Yes');
      //turned off durning testing, writes in data range with this trial code
      //Reposition from named cell to insert lines location
      ss.getRange(sheet.getCurrentCell().getRow() -2, 1, 1, 
      sheet.getMaxColumns()).activate();  
      //Insert ten lines, copy and paste special formulas only
      Insert_10_Lines()
      //https://stackoverflow.com/questions/59772934/get-range-from- 
      getrangebyname-activate-range
    };

Всего 2 ответа

Автоматический диспенсер мыльной пены от xiaomi.


Попробуй это:

function getEOD() {
 var ss=SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
 var MyRange=ss.getRangeByName("EndData"); 
 MyRange.activate();
}

Мой ответ: у меня упорство, я пытаюсь ограничить переменные по одной, чтобы доказать, как все работает на самом деле, переместил код, который работал в файле тестового скрипта, в файл производственного скрипта, и он не работал для копирования чего-либо Я прошел тестирование, вернулся к тестовому сценарию, и он тоже не работал, после того, как он ... В игре есть переменные, которые, кажется, происходят во время сценариев, сохранения и выполнения шагов, которые меняют интерактивные ответы, которыми я являюсь получение. Метод проб и ошибок снова в производственной среде придумал рабочую комбинацию, перейдя к предложенному простому коду и получив комбинацию, которая работает. Вот код, который работает в продукте для удовлетворения основных моих вопросов ...

function InsertRows() {
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  //Get range from named cell
  var range = SpreadsheetApp.getActiveSpreadsheet().getRangeByName("EOD");
  if (range != null) {
      Logger.log(range.getNumColumns());
  }
  //Select the cell as a starting point for code to follow
  range.activate();    //start location cell is active and row is selected

Спасибо тем, кто откликнулся на помощь! Похоже, что потребуется некоторое время, чтобы распознать закономерности и выяснить, что нужно сделать, чтобы получить согласованные результаты своевременно ...


Есть идеи?

10000