如何使用 Google DOC API 脚本在 Google 文档的 table(或数组)中添加超链接?

How to add hyperlink in table (or array) in a Google Doc using Google DOC API Script?

我有以下代码用于在 Google 文档中附加 table。

var sss = SpreadsheetApp.openById('id of spreadsheet'); 
var rawData =  sss.getDataRange().getValues()    

var data = []  
for (var i = 0; i< rawData.length; i++){
tempData=[]
tempData=[rawData[i][1],rawData[i][2],rawData[i][3]]
data.push(tempData)

}
var someDoc = DocumentApp.openById(someId);
var body = someDoc.getBody();

body.appendTable(data).editAsText().setBold(false);

这段代码工作正常。问题是rawdata[i][3]中有url。它以纯文本形式显示在 Google 文档中。如何将其转换为超链接?如果能写成body.appendParagraph("my link").setLinkUrl("http://www.google.com")就更好了。问题是它在一个数组中,而不是在段落中。

您可以尝试以下方法使 Google 文档中的所有 URL 都可点击:

function urlClickable() {
  var urlRegex = 'http[s]?:\/\/[^ ]+';
  var doc = DocumentApp.openById('yourDocId');
  var body = doc.getBody();
  var urlElement = body.findText(urlRegex);  

  while (urlElement != null) {    
    var text = urlElement.getElement().asText();

    var startOffset = urlElement.getStartOffset();
    var endOffset = urlElement.getEndOffsetInclusive();

    text.setLinkUrl(startOffset, endOffset, getUrl(text.getText()));

    urlElement = body.findText(urlRegex, urlElement);
  }
}

function getUrl(text) {
  var startOffset = text.indexOf('http');
  var endOffset = text.indexOf(' ', startOffset);

  if (endOffset === -1) {
    endOffset = text.length;
  }
  return text.substring(startOffset, endOffset);
}   

我相信你的目标如下。

  • 您想通过从 Google 电子表格中检索值来将 table 放入 Google 文档。
  • 在您的电子表格中,“D”列具有超链接。并且,您想将值设置为超链接。

这样的话,下面的修改怎么样?

修改后的脚本:

var sss = SpreadsheetApp.openById('id of spreadsheet'); 
var rawData = sss.getDataRange().getValues();
var data = []
for (var i = 0; i < rawData.length; i++) {
  tempData = []
  tempData = [rawData[i][1], rawData[i][2], rawData[i][3]]
  data.push(tempData)
}
var someDoc = DocumentApp.openById(someId);
var body = someDoc.getBody();

// I modified below script.
var table = body.appendTable(data);
for (var r = 0; r < table.getNumRows(); r++) {
  var obj = table.getCell(r, 2).editAsText();
  var text = obj.getText();
  if (/^https?:\/\//.test(text)) obj.setLinkUrl(text);
}
table.editAsText().setBold(false);
  • 当此脚本为 运行 时,将使用从电子表格检索的值放置 table。并且,关于 table 的“C”列,文本更改为超链接。

注:

  • 此修改后的脚本假设“D”列的值类似于 https://###http://###。请注意这一点。

  • 如果要在超链接中给出具体的文字(例如click here),请修改如下

    • 来自

        if (/^https?:\/\//.test(text)) obj.setLinkUrl(text);
      
    •   if (/^https?:\/\//.test(text)) obj.setText("click here").setLinkUrl(text);
      

参考文献: