首页 > 解决方案 > 从一个 Google 表格单元格中提取多个链接,然后使用 Google Apps 脚本将它们作为超链接粘贴到 Google 文档中

问题描述

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

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

我以前做过,但我只能在一个数组中获取 URL,而不是分开(观看图像 1图像 2

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

在这里,您可以使用 Google 表格中的示例来应用上述步骤(链接)。任何帮助,将不胜感激。谢谢!

标签: google-apps-scriptgoogle-sheetsgoogle-docs

解决方案


你可以参考这个示例代码:

  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();
    }
  }

注意: 如果您觉得不需要它们,可以删除它们。我只是用它们来调试代码。

它能做什么?

  1. 获取url从 A 列开始的第 1 行到最后一个可用行的链接。
  2. 解析每一行。将 url 字符串拆分为单独的 url,然后将其连接到urls数组。
  3. 使用Body.findText(searchPattern)在文档正文中查找要替换的标签
  4. 使用RangeElement.getStartOffset()获取匹配文本的起始偏移量
  5. 使用RangeElement.getElement()获取 RangeElement 对应的元素
  6. 使用Element.asText()将元素作为文本获取
  7. 使用Text.deleteText(startOffset, endOffsetInclusive)删除文档中的标记字符串
  8. 循环数组中的每个 url。注意删除当前url字符串中的空格。使用Text.appendText(text)添加 url 文本。附加 url 文本后,使用Text.setLinkUrl(startOffset, endOffsetInclusive, url)包含它的 url 链接。添加新行,然后根据 url 长度和新行长度Text.appendText(text)调整偏移量。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("*****");
        });

输出:

在此处输入图像描述


推荐阅读