【问题标题】:Extract multiple links from one Google Sheet cell and then paste them in a Google Doc as hyperlinks using Google Apps Script从一个 Google 表格单元格中提取多个链接,然后使用 Google Apps 脚本将它们作为超链接粘贴到 Google 文档中
【发布时间】:2021-06-14 15:23:39
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: google-apps-script google-sheets google-docs


    【解决方案1】:

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

      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. 获取从 A 列开始的第 1 行到最后一个可用行的 url 链接。
    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 文本后,使用 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("*****");
            });
    

    输出:

    【讨论】:

    • 如果您遇到一些问题,请告诉我,以便我修复/更新答案
    • 感谢您的支持,示例代码运行良好。我想知道如何做同样的事情,以防我在同一个单元格中有多个 URL 的多行(我已经更新了 Google 表格供您检查)。希望对您有所帮助,再次感谢!
    • 嗨。我更新了答案。如果您遇到一些问题,请告诉我
    • 顺便说一句,如果我们回答了您的问题,请点击接受按钮。通过这样做,社区中可能与您有同样担忧的其他人将知道他们的问题可以得到解决。如果您无法使用接受按钮,请随时告诉我。 How to accept answer
    • 再次感谢您的帮助罗恩!我已经接受了您的回答,并且工作正常。问候
    猜你喜欢
    • 1970-01-01
    • 2021-10-13
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    相关资源
    最近更新 更多