Получить диапазон от GetRangeByName, активировать диапазон - PullRequest
0 голосов
/ 16 января 2020

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

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

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

"Ошибка типа: не удается найти функцию getRangeByName в объектном листе. (Строка 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 ]

1 голос
/ 17 января 2020

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

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

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

0 голосов
/ 16 января 2020

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

function getEOD() {
 var ss=SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
 var MyRange=ss.getRangeByName("EndData"); 
 MyRange.activate();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...