【发布时间】: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