如何解决多行/多链接单元格中的自动超链接
从 CSV 文件导入的大文件(+1k 行)。 文件有一个包含文件地址的列,例如:
http://www.whatever.whatever/file1.jpg
有些行在所述列中有多个文件地址,用“换行符”分隔,所以有些行是
http://www.whatever.whatever/file2.jpg
http://www.whatever.whatever/file3.jpg
http://www.whatever.whatever/file4.jpg
等等...
带有 1 个地址的行被谷歌表自动转换为超链接,这正是我想要的。 具有多个文件地址的行保持原样,这就是问题所在。 如何自动链接具有多个文件地址的行而不必一一进行? 谢谢。
解决方法
你可以参考这个示例代码:
function addHyperlink(){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
var links = sheet.getRange(1,1,sheet.getLastRow(),1).getValues().flat();
links.forEach((cellLink,index) => {
Logger.log(cellLink);
Logger.log(cellLink.includes('\n'));
//Check if cell value has multiple links (contains line break)
if(cellLink.includes('\n')){
var tmpUrl = cellLink.split('\n');
var rText = SpreadsheetApp.newRichTextValue().setText(cellLink);
var startOffset = 0;
tmpUrl.forEach(url=>{
Logger.log(url);
Logger.log(url.length);
Logger.log(startOffset);
rText.setLinkUrl(startOffset,(startOffset+url.length),url);
startOffset = startOffset + url.length + 1;
});
var value = rText.build();
sheet.getRange(index + 1,1).setRichTextValue(value);
}
});
}
它有什么作用?
- 获取 A 列中的所有单元格值。使用
array.flat()
将二维数组更改为一维数组值 - 使用
array.includes()
检查每个值是否包含换行符 - 如果找到多个 url,则将每个 url 拆分为一个临时数组变量。
- 使用 RichTextValueBuilder 创建一个 SpreadsheetApp.newRichTextValue()。使用 setText(text) 根据原始单元格的值设置文本
- 循环每个单独的 url 以获取其 url 长度,用于使用 setLinkUrl(startOffset,endOffset,linkUrl) 设置超链接的
start offset
和end offset
。每次处理网址时调整start offset
。 - 使用 build() 生成 RichTextValue。使用 setRichTextValue(value) 设置单元格范围富文本值
输出:
之前:
之后:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。