如何使用公式在单元格文本中间创建超链接? [英] How can I create a hyperlink in the middle of cell text using a formula?
本文介绍了如何使用公式在单元格文本中间创建超链接?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
是否有办法以编程方式连接包含超链接文本的文本(例如使用公式)?
我正在寻找一种自动创建文档的方法,这些文档在单元格的长文本说明中包含链接,例如发票。
在Google Sheets中,
Google Sheets中的HYPERLINK
函数返回启用超链接的文本,
CONCATENATE
函数允许串接或追加各种文本。
公式 | 结果 |
---|---|
=HYPERLINK("https://stackoverflow.com", "Stack Overflow") |
Stack Overflow |
=CONCATENATE("SO: ", "https://", "stackoverflow.com") |
SO: https://stackoverflow.com (超链接未启用) |
但是,当HYPERLINK
在CONCATENATE
内使用时,超链接文本显示为纯文本。
公式 | 结果 |
---|---|
=CONCATENATE("SO: ", hyperlink("https://stackoverflow.com", "Stack Overflow")) |
SO:堆栈溢出 |
在超链接中将串联用作参数可以正常工作。
公式 | 结果 |
---|---|
=HYPERLINK(CONCATENATE("https://", "stackoverflow.com"), "Stack Overflow") |
Stack Overflow |
推荐答案
您可以使用此脚本(不按公式)设置多个超链接(任意数量)
function multipleHyperLinks() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('A1').setRichTextValue(SpreadsheetApp.newRichTextValue()
.setText("go to ... stackoverflow")
.setLinkUrl(10, 23, "https://stackoverflow.com/search?tab=newest&q=google%20sheets")
.build());
};
setLinkUrl(startOffset, endOffset, linkUrl)
顺便说一下,如果您想检索所有链接,请使用
function getMultipleLinks() {
var sh = SpreadsheetApp.getActive()
var rng = sh.getRange('A1')
var richTexts = rng.getRichTextValue().getRuns()
richTexts.forEach(function(richText){
Logger.log('|'+richText.getText() + '| = ' + richText.getLinkUrl())
})
}
编辑
这里有一个基于onEdit(E)函数的自动解决方案:
键入单元格:foo <link1|text1> foo <link2|text2> foo
例如:go to ... <https://stackoverflow.com/|stackoverflow>
在开头添加‘Edit:’以反转
// mike.steelson
// example
// go to <https://stackoverflow.com/|stackoverflow> and <https://www.amazon.fr/|amazon> here
// add Edit: at the beginning to reverse
function onEdit(event){
var sh = event.source.getActiveSheet();
var rng = event.source.getActiveRange();
var value = rng.getValue()
if (value.substring(0,5).toLowerCase()=='edit:'){
var richTexts = rng.getRichTextValue().getRuns()
var txt=''
richTexts.forEach(function(richText){
if (richText.getLinkUrl()==null){
txt+=richText.getText()
}else{
txt+= '<' + richText.getLinkUrl() + '|' + richText.getText() + '>'
}
})
rng.setValue(txt)
} else {
var occ1 = ExtractAllRegex(value,'<([^>]+)>',0)
var occ2 = ExtractAllRegex(value,'>([^<]+)<',0)
occ2.push('')
if (sh.getName()=='mySheet' && occ1.length>0){
var richText = SpreadsheetApp.newRichTextValue()
var txt = value.split('<')[0]
for (var i=0; i<occ1.length; i++){
var arr = occ1[i].replace('<','').replace('>','').split('|')
txt += arr[1]
txt += occ2[i].replace('<','').replace('>','')
}
txt += value.split('>')[value.split('>').length-1]
richText.setText(txt)
var start = value.split('<')[0].length
for (var i=0; i<occ1.length; i++){
var arr = occ1[i].replace('<','').replace('>','').split('|')
var len = arr[1].length
richText.setLinkUrl(start,start+len,arr[0])
start += len + occ2[i].replace('<','').replace('>','').length
}
rng.setRichTextValue(richText.build())
}
}
}
function ExtractAllRegex(input, pattern,groupId) {
return Array.from(input.matchAll(new RegExp(pattern,'g')), x=>x[groupId]);
}
这篇关于如何使用公式在单元格文本中间创建超链接?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文