首页 > 解决方案 > 从单个 Google 表格单元格中提取多个超链接,并将它们各自的 URL 附加到单元格中

问题描述

我有一个谷歌表,每个单元格都包含多个超链接。

我的目标是:

  1. 从说单元格A1(或活动单元格/范围)中提取url
  2. 保留现有单元格内容并将提取的 URL 附加到现有内容(在同一单元格中)
  3. 能够为一个范围而不是单独的每个单元格执行此操作

目前,我有这个代码适用于一个只有一个超链接的单元格,但会出现错误

TypeError:无法读取未定义的属性“0”

当一个单元格包含多个超链接时。

function URL() {
  var spreadsheet =SpreadsheetApp.getActive(); 
  var sheet = spreadsheet.getActiveSheet();
  var id = spreadsheet.getId();
  var range = sheet.getActiveRange();
  var linkArray = Sheets.Spreadsheets.get(id, {ranges: sheet.getName() + "!" + 
  range.getA1Notation(), fields: "sheets/data/rowData/values/hyperlink"});
  var link = linkArray.sheets[0].data[0].rowData[0].values[0].hyperlink;
  var cellInE = sheet.getRange(range.getRow(), 5);
  var cellEcontent = sheet.getRange(range.getRow(), 5).getValues()
  var appnded = cellEcontent + String.fromCharCode(10) + link;
  cellInE.setValue(appnded);
}

我是谷歌应用程序脚本和一般编码的新手。任何帮助,将不胜感激。

标签: google-apps-scriptgoogle-sheetshyperlinkgoogle-sheets-api

解决方案


您需要正确迭代linkArray,我找到了一个示例并进行了一些简短的修改。它对我有用。

function myFunction() {
  var spreadsheetId = "1olBuawXzIxriAhWM2_e42LzjWM2fh_1aWitZkJMErWk";
  let rangeToSet = SpreadsheetApp.openById(spreadsheetId).getSheetByName("Sheet1");
  var res = Sheets.Spreadsheets.get(spreadsheetId, { ranges: "Sheet1!A1:C3", fields: "sheets/data/rowData/values/hyperlink" });
  var sheets = res.sheets;
  for (var i = 0; i < sheets.length; i++) {
    var data = sheets[i].data;
    for (var j = 0; j < data.length; j++) {
      var rowData = data[j].rowData;
      for (var k = 0; k < rowData.length; k++) {
        var values = rowData[k].values;
        for (var l = 0; l < values.length; l++) {
          Logger.log(values[l].hyperlink) // You can see the URL here.
          // k is Row number
          //l is column number
          rangeToSet.getRange(k + 1, l + 1).setValue(values[l].hyperlink);
        }
      }
    }
  }
}

前:

在此处输入图像描述

现在:

在此处输入图像描述


推荐阅读