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

Posted

技术标签:

【中文标题】Apps Script:如何从没有公式的单元格中获取超链接【英文标题】:Apps Script: how to get hyperlink from a cell where there is no formula 【发布时间】:2019-05-20 16:25:43 【问题描述】:

我有一张表格,其中在单元格中设置了超链接,但 不是通过公式。单击单元格时,“fx”栏中只显示值。

我在网上搜索过,但到处都是使用getFormula() 提取超链接的信息。

但就我而言,根本没有设置公式。

我可以看到您在图像中看到的超链接,但它不在“公式/fx”栏中。

如何使用 Apps 脚本或任何公式获取该单元格的超链接?

【问题讨论】:

【参考方案1】:

当单元格只有一个 URL 时,您可以使用以下简单脚本从单元格中检索 URL。

var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
var url = sheet.getRange("A2").getRichTextValue().getLinkUrl(); //removed empty parentheses after getRange in line 2

来源:https://gist.github.com/tanaikech/d39b4b5ccc5a1d50f5b8b75febd807a6

【讨论】:

【参考方案2】:

将包含超链接单元格的 Excel 文件转换为 Google 电子表格时,也会出现这种情况。就我而言,我使用 Sheets API 检索 URL。示例脚本如下。我认为可能有几种解决方案。因此,请将此视为其中之一。

当您使用此脚本时,请在高级 Google 服务和 API 控制台中启用 Sheets API。您可以在 here 了解如何启用 Sheets API。

示例脚本:

var spreadsheetId = "### spreadsheetId ###";
var res = Sheets.Spreadsheets.get(spreadsheetId, ranges: "Sheet1!A1:A10", fields: "sheets/data/rowData/values/hyperlink");
var sheets = res.sheets;
for (var i = 0; i < sheets.length; i++) 
  var data = sheets[i].data;
  for (var j = 0; j < data.length; j++) 
    var rowData = data[j].rowData;
    for (var k = 0; k < rowData.length; k++) 
      var values = rowData[k].values;
      for (var l = 0; l < values.length; l++) 
        Logger.log(values[l].hyperlink) // You can see the URL here.
      
    
  

注意:

请设置spreadsheetIdSheet1!A1:A10 是一个示例。请根据您的情况设置范围。 在这种情况下,rowData 的每个元素都对应于行的索引。 values的每一个元素都对应着column的索引。

参考资料:

Method: spreadsheets.get

如果这不是你想要的,请告诉我。我想修改它。

【讨论】:

这就是我想要的。但它不应该是 Advance API 的一部分。电子表格的类范围中应该有一些方法可以轻松实现这一点。无论如何,谢谢! @Irfan Alam 感谢您的回复。我很高兴你的问题得到了解决。当我在 Class SpreadsheetApp 找到这种情况的方法时,我想添加它。 @IrfanAlam check another answer 灵感来自 Tanaike 的另一个使用 SpreadsheetApp 的 sn-p 【参考方案3】:

我尝试了解决方案 2:

var urls = sheet.getRange('A1:A10').getRichTextValues().map( r => r[0].getLinkUrl() ) ;

我得到了一些链接,但大部分都为空。 我制作了解决方案 1 的较短版本,它产生了所有链接。

  const id = SpreadsheetApp.getActive().getId() ;
  let res = Sheets.Spreadsheets.get(id,
     ranges: "Sheet1!A1:A10", fields: "sheets/data/rowData/values/hyperlink");
  var urls = res.sheets[0].data[0].rowData.map(r => r.values[0].hyperlink) ;

【讨论】:

以上是关于Apps Script:如何从没有公式的单元格中获取超链接的主要内容,如果未能解决你的问题,请参考以下文章

VBA,如何判断单元格中公式的结果是不是是星期天或星期六呢?

使用单元格中的值作为公式中的单元格引用?

请问如何从Excel一列单元格中,用公式提取唯一值?

通过在一个单元格中输入公式来填充不同单元格的数组公式

excel 从带公式的单元格中取值函数是哪个

如何计算一行excel单元格中相同字符的出现次数