从一个 Google Sheet 单元格中提取多个链接,然后使用 Google Apps 脚本将它们作为超链接粘贴到 Google 文档中

Extract multiple links from one Google Sheet cell and then paste them in a Google Doc as hyperlinks using Google Apps Script

我想使用 Google Apps 脚本执行以下操作:

  1. 在 Google 工作表中搜索具有多个 URL 的特定单元格
  2. 拆分 URL 并将它们作为单独的链接,以避免在工作表中使用拆分功能(观看 image
  3. 使用标签将每个 URL 附加到 Google 文档中

我以前做过,但我只能在一个数组中获得 URL 而不是分开的(观看 image 1 and image 2)

for (var i=0; i<row[rownumber].length; i++){
  if (row[rownumber].includes(",")) 
  img=row[rownumber].split(",");
  body.replaceText('{{TagName}}',img);
}

这里有 Google 表格中的示例,以便应用上述步骤 (link)。任何帮助,将不胜感激。谢谢!

可以参考这个示例代码:

  var doc = DocumentApp.openById('YourDocId');   
  var body = doc.getBody();

  var sheet = SpreadsheetApp.getActiveSheet();
  var rowValues = sheet.getRange(1,1,sheet.getLastRow(),1).getValues().flat();

  //Combine all row values into a single url array
  var urls = [];
  rowValues.forEach(row => {

    if(row.includes(",")){
      var tmp = row.split(",");
      urls = urls.concat(tmp);
    }
  });

  Logger.log(urls);
  Logger.log(urls.length);
  
  if(urls.length > 0){
    var tag = "{{TagName}}";
    var newLine = "\n\n";

    var element = body.findText(tag);
    if(element){ // if found a match
        var start = element.getStartOffset();
        var text = element.getElement().asText();
        //remove tag in the docs
        text.deleteText(start,start+tag.length-1);

        //Add url
        urls.forEach(url => {
          url = url.trim(); //remove whitespaces on both ends of the url string
          Logger.log("START: "+start);
          Logger.log(url);
          Logger.log("URL LENGTH: "+url.length);
          text.appendText(url).setLinkUrl(start, start+url.length-1, url);
          text.appendText(newLine);
          start = start + url.length + newLine.length;
          Logger.log(text.getText());
          Logger.log("*****");
        });
        doc.saveAndClose();
    }
  }

Note: You can remove the logs if you felt like you don't need them. I just used them to debug the code.

它有什么作用?

  1. 获取从 A 列开始的第 1 行到最后可用行的 url 个链接。
  2. 解析每一行。将 url 字符串拆分为单独的 urls' 然后将其连接到 urls 数组。
  3. 使用 Body.findText(searchPattern)
  4. 在文档正文中找到要替换的标签
  5. 使用RangeElement.getStartOffset()
  6. 获取匹配文本的起始偏移量
  7. 使用RangeElement.getElement()
  8. 获取RangeElement对应的元素
  9. 使用 Element.asText()
  10. 将元素作为文本获取
  11. 使用 Text.deleteText(startOffset, endOffsetInclusive)
  12. 删除文档中的标记字符串
  13. 循环 array.Take 注释中的每个 url 以删除当前 url 字符串中的空格。使用 Text.appendText(text). Once the url text was appended, include it's url link using Text.setLinkUrl(startOffset, endOffsetInclusive, url) 添加 url 文本。使用 Text.appendText(text) 添加新行,然后根据 url 长度和新行长度调整 start 偏移量。 (重复直到文档中添加了所有 url 链接)

输出:

(更新:)

如果您想在超链接中使用不同的名称,可以替换附加文本并修改 setLinkUrl()

中的偏移量

示例代码更改:

        //Add url
        urls.forEach((url, index) => {
          url = url.trim(); //remove whitespaces on both ends of the url string
          var name = "Image"+(index+1);
          Logger.log("START: "+start);
          Logger.log(url);
          Logger.log("URL LENGTH: "+url.length);
          Logger.log("NAME LENGTH: "+name.length);
          text.appendText(name).setLinkUrl(start, start+name.length-1, url);
          text.appendText(newLine);
          start = start + name.length + newLine.length;
          Logger.log(text.getText());
          Logger.log("*****");
        });

输出: