【问题标题】:Google sheets script get cell Hyperlink谷歌表格脚本获取单元格超链接
【发布时间】:2021-09-24 18:12:39
【问题描述】:

我正在尝试获取一系列单元格的 URL,但 getLinkUrl 总是返回 null

这是我尝试过的:

var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Liste");
var url = sheet.getRange("A1").getRichTextValue().getLinkUrl();

返回:null

var test = sheet.getRange("A1").getRichTextValue().getText(); 

这会返回:text(这是 A1 中的文本,所以它正在工作,所以我尝试了)

var test2 = sheet.getRange("A1").getRichTextValue().getLinkUrl(); 

返回:null(我不明白为什么,所以尝试了这个)

var test3 = sheet.getRange("A1:A10").getRichTextValues(); 

这会返回:

[ [ {} ],
  [ {} ],
  [ {} ],
  [ {} ],
  [ {} ],
  [ {} ],
  [ {} ],
  [ {} ],
  [ {} ],
  [ {} ] ]

所以我迷路了,我真的不知道如何获取 / many 单元格的 URL。

在文档中,有一个关于 getLinkUrl 返回 null 如果有多个 URL 但我不知道如何只提取一个 URL 的解释。

我正在使用的工作表非常简单,只有A列中的单词,

appli
info
motivation
anime
dev perso
reflexion
funny
sad

【问题讨论】:

  • 您能提供一个包含我们可以编辑的链接的示例吗?谢谢
  • 恐怕我不明白你需要什么.. 如果它在工作表中,我只在 A 列中得到一个单词列表:appli infomotive 日本动漫 dev perso reflexion funny伤心
  • 您可以使用 getFormula(),它会返回类似“=HYPERLINK()”的内容,然后您可能可以在那里提取链接。请分享您的工作表副本以了解有关您的问题的更多详细信息。

标签: javascript google-apps-script google-sheets


【解决方案1】:

虽然我不确定您来自I'm trying to get the url of a range of cell but it always return null to me. 的实际电子表格,但我认为在您的情况下,超链接可能设置在单元格文本的一部分中。那么,你能测试一下下面的示例脚本吗?

示例脚本:

var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Liste");
var res = sheet
  .getRange("A1")
  .getRichTextValue()
  .getRuns()
  .reduce((ar, e) => {
    var url = e.getLinkUrl();
    if (url) ar.push({url: url, text: e.getText()});
    return ar;
  }, []);
console.log(res)

或者,如果您想从多个单元格中检索 URL,您也可以使用以下脚本。

var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Liste");
var res = sheet
  .getRange("A1:A10")
  .getRichTextValues()
  .map((r, i) =>
    r.flatMap((c, j) =>
      c.getRuns().reduce((ar, e) => {
        var url = e.getLinkUrl();
        if (url) ar.push({ url: url, text: e.getText(), row: i + 1, col: j + 1 });
        return ar;
      }, [])
    )
  );
console.log(res)
  • var test3 = sheet.getRange("A1:A10").getRichTextValues(); 返回RichTextValue[][] 的对象。这样,在您的问题中获得了这样的结果。当您要检索 URL 时,需要从对象中检索它。

参考资料:

编辑:

来自 the thing I try to obtain is this something like this : (which is the link to the cell A1) https://docs.google.com/spreadsheets/d/###/edit#gid=0&range=A1,我了解到您想检索单元格的超链接。在这种情况下,getRichTextValue 不能使用。那么,下面的示例脚本怎么样?

示例脚本:

function myFunction() {
  // Ref: https://stackoverflow.com/a/21231012/7108653
  const columnToLetter = column => {
    let temp,
      letter = "";
    while (column > 0) {
      temp = (column - 1) % 26;
      letter = String.fromCharCode(temp + 65) + letter;
      column = (column - temp - 1) / 26;
    }
    return letter;
  };

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Liste");
  var range = sheet.getRange("A1:A10");
  
  var spreadsheetUrl = ss.getUrl();
  var sheetId = sheet.getSheetId();
  var startRow = range.getRow();
  var endRow = startRow + range.getNumRows() - 1;
  var startCol = range.getColumn();
  var endCol = startCol + range.getNumColumns() - 1;
  var cellLinks = [];
  for (var r = startRow; r <= endRow; r++) {
    for (var c = startCol; c <= endCol; c++) {
      var a1Notation = columnToLetter(c) + r;
      cellLinks.push({cell: a1Notation, url: `${spreadsheetUrl}#gid=${sheetId}&range=${a1Notation}`});
    }
  }
  console.log(cellLinks)
}
  • 在上面的脚本中,单元格“A1:A10”的超链接被返回。例如使用var range = sheet.getRange("A1");时,只返回单元格“A1”的超链接。

【讨论】:

  • 我尝试了两种代码,它返回 [] 和 [[],[],[],[]] 我真的不明白为什么。我们可以说这段代码应该返回单元格的 url 吗?因为我问的时候可能不是很清楚。但是,是的,那些对我不起作用。
  • @Madar 感谢您的回复。我带来的不便表示歉意。在我的回答中,数组的每个元素都是 JSON 对象。所以在这种情况下,它就像[{ur:"###",text:"###",row:##,col:##}, {,,,}, ]。来自I tried both code and it returns [] and [[],[],[],[]],我担心您可能没有使用我提出的脚本。这个怎么样?而且,为了确认您目前的情况,您能否提供用于复制您的问题的示例电子表格?借此,我想确认一下。
  • @Tainake 谢谢你的帮助,恐怕我没有理解 JSON 对象的故事。示例电子表格非常简单,只有一张名为“Liste”的表格,以及以下从 A1 到 A8 开头的单词:appli infomotiveanime dev perso reflexion funny sad
  • 但是我现在在想,也许我没有使用适当的功能。我们可以说这个功能应该给我一个像这样的网址:docs.google.com/spreadsheets/d/… 吗?提前致谢
  • @Madar 感谢您的回复。很高兴您的问题得到解决。
猜你喜欢
  • 1970-01-01
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多