How to extract the link from a cell now that links are not reflected as HYPERLINK?

前端 未结 1 1163
名媛妹妹
名媛妹妹 2020-11-27 23:27

"Insert Link" is not producing a =HYPERLINK(’’,’’) anymore.

Before, if you linked a cell with a value ‘X’. It was converted into the formula

相关标签:
1条回答
  • 2020-11-27 23:56

    I could confirm your situation. In this case, it seems that the hyperlink can be retrieved from RichTextValue object. Namely, I thought that the specification was changed to that the hyperlink is given to the text using RichTextValue.

    So as a sample case, it supposes as follows.

    • A text of X is put in a cell "A1".
    • This cell is manually linked to a URL like https://www.google.com.

    In this case, the cell has no =HYPERLINK("https://www.google.com","X"). The sample script for retrieving the URL from this situation is as follows.

    Sample script:

    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
    var url = sheet.getRange("A1").getRichTextValue().getLinkUrl();
    console.log(url);
    
    • In this case, the URL is linked to whole text in a URL. So above script can be used.

    Note:

    • In the current stage, the multiple hyperlinks can be added to the texts in one cell. For example, when 2 URLs are put to the text in a cell, you can use the following sample script. In this sample, a text of url1, url2 is put to a cell "A1", and url1 and url2 are linked with each link.

      var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
      var RichTextValue = SpreadsheetApp.newRichTextValue()
        .setText("url1, url2")
        .setLinkUrl(0, 4, "https://url1/")
        .setLinkUrl(6, 10, "https://url2/")
        .build();
      sheet.getRange("A1").setRichTextValue(RichTextValue);
      
    • When the multiple URLs are retrieved from the text in a cell, you can use the following sample script.

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

    References:

    • getRichTextValue()
    • getRichTextValues()
    • Class RichTextValue

    Updated at June 13, 2020:

    By the update at June 12, 2020, the documents of getLinkUrl() and setLinkUrl(linkUrl) were added to the official documents.

    0 讨论(0)
提交回复
热议问题