谷歌表格,脚本在一个单元格中设置多个超链接

Posted

技术标签:

【中文标题】谷歌表格,脚本在一个单元格中设置多个超链接【英文标题】:Google sheets, script to set multiple hyperlinks in one cell 【发布时间】:2020-05-28 22:17:35 【问题描述】:

我的目标是创建一个电子表格单元格,其中包含来自 Google 脚本的多个超链接。

我可以创建一个包含多个链接的单元格,选择部分单元格文本,然后使用 Ctrl + K 或菜单 insert link。我的单元格以google and yahoo 为例,有两个超链接,每个搜索引擎一个。

我可以通过两种不同的方式阅读此单元格中的超链接:

 var range = SpreadsheetApp.getActiveSheet().getRange('A1');
 var richText = range.getRichTextValue();
 var allRuns = richText.getRuns();
 var firstLink = allRuns[0].getLinkUrl();
 var secondLink = allRuns[2].getLinkUrl();
 var gLink = richText.getLinkUrl(0, 5);
 var aLink = richText.getLinkUrl(11, 15);

但是没有可用的setLinkUrl 方法。我在Google sheets API 中也找不到任何东西。

我复制了这个单元格并在 Linux 中使用 xclip 命令

xclip -selection clipboard -o  -t text/html

结果是

<meta http-equiv="content-type" content="text/html; charset=utf-8">                                                                                                                                                                                                  
<style type="text/css">                                                                                                                                                                                                                                              
<!--                                                                                                                                                                                                                                                                 
td                                                                                                                                                                                                                                                                  
    border: 1px solid #ccc;                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                    

br                                                                                                                                                                                                                                                                  
    mso-data-placement: same-cell;                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                    
-->                                                                                                                                                                                                                                                                  
</style>                                                                                                                                                                                                                                                             
<span style="font-size: 10pt; font-family: Arial; font-style: normal;"                                                                                                                                                                                               
    data-sheets-value="&quot;1&quot;:2,&quot;2&quot;:&quot;google and yahoo&quot;"                                                                                                                                                                                 
    data-sheets-userformat="&quot;2&quot;:1049089,&quot;3&quot;:&quot;1&quot;:0,&quot;12&quot;:0,&quot;23&quot;:1"                                                                                                                                               
    data-sheets-textstyleruns="&quot;1&quot;:0,&quot;2&quot;:&quot;2&quot;:&quot;1&quot;:2,&quot;2&quot;:1136076,&quot;9&quot;:1&quot;1&quot;:6&quot;1&quot;:11,&quot;2&quot;:&quot;2&quot;:&quot;1&quot;:2,&quot;2&quot;:1136076,&quot;9&quot;:1"   
    data-sheets-hyperlinkruns="&quot;1&quot;:0,&quot;2&quot;:&quot;https://www.google.com/&quot;&quot;1&quot;:6&quot;1&quot;:11,&quot;2&quot;:&quot;https://www.yahoo.com/&quot;&quot;1&quot;:16"><span                                                   
    style="font-size: 10pt; font-family: Arial; font-style: normal; text-decoration: underline; -webkit-text-decoration-skip: none; text-decoration-skip-ink: none; color: #1155cc;"><a                                                                              
        class="in-cell-link" target="_blank" href="https://www.google.com/">google</a></span><span                                                                                                                                                                   
    style="font-size: 10pt; font-family: Arial; font-style: normal;">                                                                                                                                                                                                
        and </span><span                                                                                                                                                                                                                                             
    style="font-size: 10pt; font-family: Arial; font-style: normal; text-decoration: underline; -webkit-text-decoration-skip: none; text-decoration-skip-ink: none; color: #1155cc;"><a                                                                              
        class="in-cell-link" target="_blank" href="https://www.yahoo.com/">yahoo</a></span></span>                                                                                                                                                                   

我不确定这是否意味着超链接有自己的运行,独立的表单文本样式运行?任何指针表示赞赏。

【问题讨论】:

***.com/q/61787891/1595451 【参考方案1】:
function addMultipleUrlsToCell() 
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet2');
  sh.getRange('A1').setValue('');
  var RichTextValue=SpreadsheetApp.newRichTextValue()
  .setText("Google,GASReference,SO")
  .setLinkUrl(0,6,"https://google.com/")
  .setLinkUrl(7,19,"https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app/")
  .setLinkUrl(20,22,"https://***.com")
  .build();
  sh.getRange("A1").setRichTextValue(RichTextValue);


function retrieveMultipleUrls() 
  const ss=SpreadsheetApp.getActive();
  const sh=ss.getSheetByName('Sheet2');
  const rg=sh.getRange(1,1);
  var rtv=rg.getRichTextValue().getRuns();
  var res=rtv.reduce(function(ar,e)
    var url=e.getLinkUrl();
    if(url)ar.push(url);
    return ar;
  ,[]);
  console.log(res);

Reference

【讨论】:

以上是关于谷歌表格,脚本在一个单元格中设置多个超链接的主要内容,如果未能解决你的问题,请参考以下文章

Apps Script:如何从没有公式的单元格中获取超链接

将单元格链接到多个单元格不包括Google表格中的中间范围

将超链接放在单元格中以转到同一工作表的另一张表的脚本

c#epplus 怎么给单元格添加超链接

超链接到具有相同名称/值的单元格范围 - Google 表格

如何在单个单元格中插入多个超链接?