Google App Script + Google Sheet - извлекает URL из ячейки (которая ссылается на отдельный лист) и извлекает вкладку листа из связанного листа - PullRequest
0 голосов
/ 28 января 2020

Еще один вопрос из скрипта приложения. Я работал / изучал это в течение нескольких дней и приблизился, но мне нужно добавить элемент автоматизации, мои текущие сценарии не подходят для конечной цели.

Мне нужно:

  • Получить URL из ячейки на моем основном листе "генератора".
  • URL указывает на совершенно отдельный Google Sheet.
  • Мне нужно возьмите указанную c именованную вкладку листа из внешней ссылки Google Sheet и перенесите ее в мой мастер do c в качестве новой вкладки листа.
  • Исходная ячейка с URL-адресом может быть заменена с новой ссылкой, следовательно, требуется автоматизация. Я не хочу иметь несколько сценариев с жестко закодированными идентификаторами или URL-адресами листов.
  • Ссылка URL-адреса может измениться, но на каждом внешнем листе будет вкладка с одинаковым именем, поэтому она остается согласованной.

Кажется, если я сохраню ячейку URL (в данном случае B28 содержит URL) как переменную в сценарии, она больше не станет читаемой. Например:

  var SPREADSHEET_URL_REFERENCE_SOURCE_SHEET = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Calc Generator");
  var SPREADSHEET_URL_REFERENCE_SOURCE_RANGE = SPREADSHEET_URL_REFERENCE_SOURCE_SHEET.getRange("B28");
  var SPREADSHEET_URL_VALUE = SPREADSHEET_URL_REFERENCE_SOURCE_RANGE.getValues();

После этого мой сценарий больше не может получить URL-адрес. Буду признателен за любую помощь, в этот момент я немного ослеп!

Спасибо.

Ответы [ 2 ]

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

Я думаю, что понял это. Он извлечет URL-адрес внешнего листа из ячейки на указанном вами c листе и перетянет внешний лист на ваш и создаст новую копию его вкладки.

Как сказал Купер , установка getValue помогла, но тогда я могу использовать openByURL и указать на свою переменную ссылки, чтобы захватить ее, это позволяет получить определенные c внешние вкладки листа.

Спасибо за помощь!

    function copySheettest()
{
  //  
  var SPREADSHEET_URL_REFERENCE_SOURCE_SHEET = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("[MASTER] Calc Generator");
  var SPREADSHEET_URL_REFERENCE_SOURCE_RANGE = SPREADSHEET_URL_REFERENCE_SOURCE_SHEET.getRange("B28");
  var SPREADSHEET_URL_VALUE = SPREADSHEET_URL_REFERENCE_SOURCE_RANGE.getValue();
  Logger.log(SPREADSHEET_URL_REFERENCE_SOURCE_RANGE);



  var sourceSheet = SpreadsheetApp.openByUrl(SPREADSHEET_URL_VALUE);
  var source_sheet = sourceSheet.getSheetByName("Info Calculations");
  var target = SpreadsheetApp.getActiveSpreadsheet();
  var target_sheet = target.getSheetByName("target_sheet");
  var source_range = source_sheet.getRange("A1:AA69");
  var target_range = target_sheet.getRange("A1:AA69");
  //
  var values = source_range.getValues();
  var bGcolors = source_range.getBackgrounds();
  var colors = source_range.getFontColors();
  var fontSizes = source_range.getFontSizes();
  // make use of autocomplete to find other methods...
  target_range.setValues(values);
  target_range.setBackgrounds(bGcolors);
  target_range.setFontColors(colors);
  target_range.setFontSizes(fontSizes);
}
0 голосов
/ 29 января 2020

Измените эту строку:

var SPREADSHEET_URL_VALUE = SPREADSHEET_URL_REFERENCE_SOURCE_RANGE.getValues(); 

на эту

var SPREADSHEET_URL_VALUE = SPREADSHEET_URL_REFERENCE_SOURCE_RANGE.getValue();

Другими словами, удалите s в конце. Если вы этого не сделаете, тогда нужное вам значение станет SPREADSHEET_URL_VALUE[0][0] Даже если это всего лишь одна ячейка, это все равно двумерный массив.

...