23

I have always used the insertText() function, but now I want to write a link in my google docs. The ideal would be to be able to write in HTML, but I don't know how.. it seems that it is not possible with the insertText() function.

How can I do that ?

2

5 Answers 5

31

You should be able to use setFormula and the Hyperlink formula like so:

var value = '=HYPERLINK("www.google.com", "Google")';

SpreadsheetApp.getActiveSpreadsheet()
   .getSheetByName("Sheet1")
   .getRange("A1")
   .setFormula(value);

Edit: Looks like I misread the question. Try this instead:

DocumentApp.getActiveDocument()
  .getBody()
  .editAsText()
  .insertText(0, "link text")
  .setLinkUrl("www.google.com");

Edit 2: Looks like .setLinkUrl() is effecting the whole body, not the text inserted. If you put the link text into a variable and use the length of the variable to mark the link area, it should work. Try this instead:

function insertLink() {
  var text = "link text\n";
  var url = "www.google.com";
  DocumentApp.getActiveDocument()
    .getBody()
    .editAsText()
    .insertText(0, text)
    .setLinkUrl(0, text.length, url);
}
Sign up to request clarification or add additional context in comments.

4 Comments

Thank you but I am looking for a way to do that in Google Docs, not Google Spreadsheat
I'm sorry, you're right. Try adding .setLinkUrl("www.google.com"); after .insertText() with your link text instead of google.com. E.G. DocumentApp.getActiveDocument().getBody().editAsText().insertText(0, "link text").setLinkUrl("www.google.com");
Thank you very much for your answer. I tried this, but unfortunately, the whole document (the new line at the beginning + the rest of the doc already there) become a link with this method... What can I do to solve that ?
@qcha see my latest edit, that should solve it I think.
10

To add a hyperlink in a document use Body.appendParagraph with setLinkUrl, then merge.

let doc = DocumentApp.create("My Document");
let body = doc.getBody();
body.appendParagraph("Please click ");
let link = body.appendParagraph("here").setLinkUrl("http://www.google.com");
link.merge();
let closing = body.appendParagraph(".");
closing.merge();

The code above will create a document with text that looks like:

Please click here.

3 Comments

this answer is much cleaner than the accepted one.
Thanks for this. How can we do this for a text in Google Slides?
4

You can also use the function below to make all the links in your document clickable.

    function makeLinksClickable(document) {
        const URL_PATTERN="http[^\b]+"
        const body = document.getBody()
        var foundElement = body.findText(URL_PATTERN);
        while (foundElement != null) {
          // Get the text object from the element
          var foundText = foundElement.getElement().asText();
          
          // Where in the element is the found text?
          const start = foundElement.getStartOffset();
          const end = foundElement.getEndOffsetInclusive();
          const url = foundText.getText().substring(start,end + 1)      
          //make url clickable
          foundText.setLinkUrl(start, end, url)
          
          // Find the next match
          foundElement = body.findText(URL_PATTERN, foundElement);
        }    
      }

1 Comment

This is what I've been looking for. Maybe I should ask a separate question and have you answer it. You could make a separate question and answer it, too.
1

If you are looking to find a string with a hyperlink, the following code will work.

function insertLink(){      
      const body = DocumentApp.getActiveDocument().getBody()
      const text = body.findText('{{googleLink}}').getElement().asText()  
      text.setText('Link to google')
      text.setLinkUrl('www.google.com')
}

Comments

-2

I am using this script, this is working Calomun 1 Row > 2.

    function InsertLink(e)
    {
      var actSht = e.source.getActiveSheet();
      if (actSht.getName() == ['SheetName']){

      var activeCell = actSht.getActiveCell(); //Detec the ActiveCell

      //var activeCell = event.range;
      var activeCellValue = e.value;

      var column = activeCell.getColumn();
      var colNums  = [1]; //Columns, whose edit is considered
      if(colNums.indexOf(column) == -1) return; //If column other than considered then return

      var row = activeCell.getRow();
      if(row < 2)   return; //If header row then return

      var length = String(activeCellValue).length;

      if (!e.value)
      {
        activeCell.setValue()
      }
      else if(length > 4)
      {
        activeCell.setValue('=HYPERLINK' + '("http://otrs/otrs/index.pl?Action=AgentTicketZoom;TicketNumber='+activeCellValue+'";"'+activeCellValue+'")'        );
      }
    }
    }

1 Comment

This question is about Google Docs, not Google Sheets.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.