google-apps-script - 从一个 Google 表格单元格中提取多个链接,然后使用 Google Apps 脚本将它们作为超链接粘贴到 Google 文档中
问题描述
我想使用 Google Apps 脚本执行以下操作:
- 使用多个 URL 搜索 Google 表格中的特定单元格
- 拆分 URL 并将它们作为单独的链接获取,以避免在工作表中使用拆分功能(观看图片
- 使用标签将每个 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 表格中的示例来应用上述步骤(链接)。任何帮助,将不胜感激。谢谢!
解决方案
你可以参考这个示例代码:
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();
}
}
注意: 如果您觉得不需要它们,可以删除它们。我只是用它们来调试代码。
它能做什么?
- 获取
url
从 A 列开始的第 1 行到最后一个可用行的链接。 - 解析每一行。将 url 字符串拆分为单独的 url,然后将其连接到
urls
数组。 - 使用Body.findText(searchPattern)在文档正文中查找要替换的标签
- 使用RangeElement.getStartOffset()获取匹配文本的起始偏移量
- 使用RangeElement.getElement()获取 RangeElement 对应的元素
- 使用Element.asText()将元素作为文本获取
- 使用Text.deleteText(startOffset, endOffsetInclusive)删除文档中的标记字符串
- 循环数组中的每个 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("*****");
});
输出:
推荐阅读
- fluentd - Fluentd 从控制台和日志文件中读取日志?
- php - 对多维数组进行排序 PHP
- javascript - 搜索 JavaScript 方法以排除元素
- r - 折叠行,其中一些都是 NA,列是因子、字符和数字类的混合
- php - php artisan 命令在 laravel 中返回错误
- mysql - 在mysql中创建表时更改列数据类型
- javascript - 创建 10 个 div,但仅根据 api 的值向其中一些添加颜色
- javascript - 隐藏 HTML 表单,直到执行操作
- ios - iOS 14 设备上的离子服务。错误“无效服务”
- security - Symfony 4.4 多个提供商的多个防火墙安全性