【问题标题】:App Script - Exporting Sheets Hyperlinks to Docs应用程序脚本 - 将表格超链接导出到文档
【发布时间】:2021-11-16 01:43:52
【问题描述】:

我有一个 google 表格 - 当出现新行时,我正在使用预定义模板通过合并将输出写入 Google 文档。 一切正常,但由于我只能弄清楚如何使用 .replaceText() 函数来实现合并,因此某些工作表列中的超链接会导出为纯文本。

经过大量的代码修改和抄袭(谢谢大家),我设法拼凑出以下功能:

function makeLinksClickable(document) {
        const URL_PATTERN = "https://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]" 
        const URL_PATTERN_LENGTH_CORECTION = "".length
        const body = document.getBody()
        var foundElement = body.findText(URL_PATTERN);
        while (foundElement != null) {  
          var foundText = foundElement.getElement().asText();
          const start = foundElement.getStartOffset();
          const end = foundElement.getEndOffsetInclusive() -  URL_PATTERN_LENGTH_CORECTION;
          const url = foundText.getText().substring(start,end+1)  
          foundText.setLinkUrl(url)
          foundElement = body.findText(URL_PATTERN, foundElement);
        }    
}

在将所有列写入文档后,我在创建的文档上调用此函数以查找超链接并将其设为超链接 :) 只要每个单元格只包含一个超链接,我的功能就可以工作。 它也适用于文档中有多个超链接的情况。

但是,某些单元格可以有多个超链接,并将它们写到文档中,每个单元格都换行。 尽管该函数正确地找到了多个 URL 并使它们在文档中可单击,但存在一个问题。 例如,如果单元格中有 2 个超链接,它们会被导出到文档中的 2 行,但是在通过函数运行它们之后 - 即使每个超链接本身都是唯一的,两个超链接现在都将链接到同一个图像(第一个)来自原始单元格的链接。

2 converted hyperlinks that link to the same image

(注意 - 如果我不运行我的函数并将导出的超链接保留为文本。然后进入创建的文档并在导出的超链接的末尾手动添加一个空格,然后它们会变为蓝色并变为可点击并链接到正确的图像,我确实尝试在此之前以编程方式添加一个空间,但也无法解决)

我已经用尽了有限的编码能力,不明白为什么我的函数“似乎”可以正确地通过每个超链接,但不能链接到文档中的正确图像。

任何帮助将不胜感激。 谢谢

// --------------------------------------------- --------------------------

感谢您抽出宝贵时间查看此问题,我将尝试进一步解释这些问题。在这里很难显示,因为复制到这里的链接实际上可以正常工作,它们只是在 google 文档中行为不端。

导出行中的一个单元格有多个用逗号分隔的超链接。 它们作为文本字符串从单元格导出到文档,如下所示:

单个表格单元格中用于导出的链接:

"hyperlink-1-as-a-string",(链接到图片 1)

"hyperlink-2-as-a-string",(链接到图片 2)

"hyperlink-3-as-a-string",(链接到图片 3)

"hyperlink-4-as-a-string",(链接到图片 4)

“hyperlink-5-as-a-string”(链接到图片 5)

然后我运行我的函数以使它们再次可点击。

如果导出时同一个单元格中有两个以上的超链接,那么在运行该函数后会出现以下问题。

导出的文本链接转换为可点击的超链接:

“hyperlink-1-as-a-string”,(链接到图片 5)

"hyperlink-2-as-a-string",(链接到图片 5)

“hyperlink-3-as-a-string”,(链接到图片 5)

"hyperlink-4-as-a-string",(链接到图片 5)

“hyperlink-5-as-a-string”(链接到图片 5)

我“认为”发生的事情是我的函数使所有 5 个超链接成为一个大超链接,恰好使用了最后一个超链接图像。 如果我将 URL 复制并粘贴到单独的文档(如电子邮件)中,那么它们会显示为一个大超链接,而不是 5 个单独的超链接。

// --------------------------------------------- ------------------

该函数搜索实际上是谷歌超链接的文本模式。 (开始 https:// 等) 当它找到一个时,它会计算出到文本字符串末尾的长度,然后使用 setLinkUrl() 将超链接制作成可点击的超链接。

如果只有一个文本超链接,那么它可以工作。

如果有多个文本超链接,用逗号分隔,则没有。

【问题讨论】:

  • 我为我糟糕的英语水平道歉。不幸的是,我无法理解您问题中的图像。为了正确理解您的问题,您能否提供您期望的示例输入和输出情况作为图像?通过这个,我想试着理解你的问题。
  • 感谢您花时间浏览。我已编辑问题以(希望)提供更清晰的解释。
  • 感谢您的回复。我不得不为我糟糕的英语水平道歉。不幸的是,我仍然无法理解你的问题。但我想试着理解它。当我能正确理解它时,我会想办法。
  • 很抱歉,很难解释,尤其是当试图在此处发布时,演示的行为已损坏。我添加了一个专注于函数本身的编辑。我不确定在那之后如何更好地解释它。感谢您抽出宝贵时间查看。

标签: google-sheets hyperlink google-docs document


【解决方案1】:

我解决了一些问题。这就是我最终得到的结果,它基本上是由其他几个问题和答案组合而成的——它不是很聪明,但它很有效。 感谢让我弄清楚这一点的各种海报。

function sortLinks(colId, mapPoint, myBody) {
  var urls = [];

  if (colId.includes(",")) {              // IE theres more than one URL
  var tmp = colId.split(",");
  urls = urls.concat(tmp);
  }
  else {
    urls[0] = colId;                 // 1 URL no "," add to array[0] 
  }
  if (urls.length > 0) {
    var tag = mapPoint;
    var newLine = "\n";
    var element = myBody.findText(tag);
    if (element) {
      var start = element.getStartOffset();
      var text = element.getElement().asText();
      text.deleteText(start, start + tag.length - 1);
      urls.forEach((url, index) => {                                                
      url = url.trim();
      var name = "Image-Video" + (index + 1);
      text.appendText(name).setLinkUrl(start, start + name.length - 1, URL);
      text.appendText(newLine);
      start = start + name.length + newLine.length;
    });
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多