【问题标题】:How to create an array (or one long string) of hyperlinks in google docs using google script如何使用谷歌脚本在谷歌文档中创建一个超链接数组(或一个长字符串)
【发布时间】:2019-02-14 11:14:05
【问题描述】:

或者谷歌文档的超链接在原始格式中的样子。

我试着做下一件事:

var links;
var nameArr = ["1", "2", "3", "4", "5", "6"];
var tempArr= ["11", "12", "13", "14", "15", "16"];
for (i = 0; i < nameArr.length; i++) {
  nameArr[i].setUrlLink("https://en.wikipedia.org/wiki/" + tempArr[i] + "/detection"
  links = links + ", "+ nameArr[i];
}

我收到一个错误,因为我不能在字符串上使用 setLinkUrl,只能在文本对象上使用 - 没有找到将字符串转换为文本的方法。

虽然,如果我将其粘贴为“原样”,“http...”会显示为常规字符串 - 而不是链接。

我想得到这样的东西: 1, 2, 3 ......并粘贴到google docs文档中。

【问题讨论】:

  • 什么是setUrlLink?我不知道方法 Array.setUrlLink()。如果您在谈论 DocumentApp.Text.setLinkUrl(url) 那么 nameArr 中的值必须属于 Text 类,我相信您需要捕获返回值,例如 nameArr[i] = nameArr[i].setLinkUrl(url ) 然后将其放回体内。
  • nameArr 是一个字符串数组,我如何将它们转换成文本?
  • @Mark Waitzman 虽然我不确定我是否能理解你想要做什么,如果你想将nameArr的值替换为创建的URL,请将nameArr[i].setUrlLink(...修改为@ 987654330@。顺便说一句,在你的 sn-p 中,因为links 没有定义,所以links = links + ", "+ nameArr[i] 会出现错误。你的for循环从1开始。在这种情况下,nameArr2tempArr12是起始值。如果这是您想要的,则无需修改。
  • @Tanaike 我写了这段代码作为例子,真正的代码要复杂得多——不想用不相关的代码混淆人们。但你理解正确,唯一的事情是我希望 nameArr[i] 成为一个超链接:链接 "en.wikipedia.org/wiki" + tempArr[i] ,名称为 nameArr[i]。看看我写的示例输出。

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


【解决方案1】:

链接是关联元素的“丰富”功能(通常是Text)。因此,要添加指向通用文本的链接,首先必须获取关联的 Text 元素,然后在其上调用 setLinkUrl

与其他富格式方法一样,附加元素继承前一个兄弟元素的格式规范。因此,如果您格式化父元素的最后一个元素,则附加到父元素的下一个元素也可能以这种方式格式化。我为分隔符文本明确指定了nullstring URL,以避免链接超出实际显示文本。 (这意味着如果您在调用此函数后以编程方式附加到 Paragraph,则附加的文本将具有与数组中最后一个显示文本相同的 URL。)

这个简单的函数将 Paragraph 作为输入,连同显示文本数组和 URI,并将它们添加到末尾。

/**
 * Create links at the end of the given paragraph with the given text and the given urls.
 * @param {GoogleAppsScript.Document.Paragraph} pg The paragraph to hold the link array
 * @param {string[]} values The display text associated with the given links
 * @param {string[]} links The URI for the given link text
 * @param {string} [separator] text that should separate the given links. Default is comma + space, `", "`
 * @returns {GoogleAppsScript.Document.Paragraph} the input paragraph, for chaining
 */
function appendLinkArray(pg, values, links, separator) {
  if (!pg || !values || !links)
    return;
  if (!values.length || !links.length || values.length > links.length)
    throw new Error("Bad input arguments");
  if (separator === undefined)
    separator = ", ";

  // Add a space before the link array if there isn't one at the end of any existing text.
  if (pg.getText() && (!pg.getText().match(/ $/) || !pg.getText().match(/ $/).length))
    pg.appendText(" ").setLinkUrl("");
  // Add each link display text as a new `Text` object, and set its link url.
  links.forEach(function (url, i) {
    var text = values[i] || url;
    pg.appendText(text)
      .setLinkUrl(0, text.length - 1, url);
    if (separator && i < links.length - 1)
      pg.appendText(separator).setLinkUrl("");
  });
  return pg;
}

【讨论】:

  • 我必须用一个段落来保存链接数组?
  • @mark 我的示例在这里使用Paragraph 作为最终结果的目的地。这不是一个严格的要求。重点是演示如何创建代表与 Google Docs 服务的超链接的任意字符序列。这个示例函数适用于任何支持getTextappendText 方法的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多