Google App脚本+ Google表格-从单元格获取URL(链接到单独的表格),并从链接的表格中提取表格标签

时间:2020-01-28 16:55:05

标签: url google-apps-script google-sheets hyperlink

我已经研究/研究了几天,并且接近了,但是需要添加自动化元素,我当前的脚本不适合最终目标。

我需要:

  • 从我的主要“生成器”工作表中的单元格获取URL。
  • URL指向完全独立的Google表格。
  • 我需要从外部链接的Google表格中获取特定的命名工作表标签,并将其作为新的工作表标签带入我的主文档中。
  • 带有URL的源单元格可以被新链接替换,因此需要自动化。我不想使用硬编码工作表ID或URL的多个脚本。
  • URL链接可能会更改,但是每个外部工作表都会有一个名称相同的标签,以便保持一致。

如果我将URL单元(在这种情况下为B28包含URL)存储为脚本中的变量,则它不再变得可读。 EG:

  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 :(得分:0)

更改此行:

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],尽管它只是一个单元格,但仍然是一个二维数组。

答案 1 :(得分:0)

我想我已经弄明白了。它将从您自己的特定工作表上的单元格中获取外部工作​​表的URL,然后将外部工作表拉到您的外部工作表中,并为其创建新的选项卡副本。

正如Cooper所说,设置getValue很有帮助,但是随后我可以使用openByURL并指向我的链接变量来抓取它,这可以抓取特定的外部工作表标签。

谢谢您的帮助!

    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);
}