我一直在尝试使用 getlink 函数 来提取超链接的 URL。我需要从中提取链接的单元格未配置超链接公式。
但是,当我使用下面的脚本时,我总是得到:
*TypeError: Cannot read properties of null (reading 'getLinkUrl') (line 5). Why is that? *
=GETLINK(CELL("Address";R2))
function GETLINK(input){
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange(input);
var value = range.getRichTextValue();
var url = value.getLinkUrl(0,1);
return url;
}
从以下示例图像和错误消息
TypeError: Cannot read properties of null (reading 'getLinkUrl')
,
我认为您当前的问题可能是由于数值引起的。当前阶段,当单元格值为数值时,
range.getRichTextValue()
返回null
。 (这已经报告给 Google 问题跟踪器。Ref)在这种情况下,即使单元格具有超链接,也会显示类似错误消息的错误。
为了解决这个问题并找回超链接,下面的修改如何?
请将以下脚本复制并粘贴到 Google Spreadsheet 的脚本编辑器中并保存脚本。
在此修改中,由于
setNumberFormat
,该脚本无法用作自定义函数。因此,我提出了一个示例脚本,用于从源范围检索 URL 并将 URL 放入目标范围。
使用此脚本时,请设置
srcRange
和dstRange
的值,并通过脚本编辑器运行脚本。这样,脚本就会运行并从 srcRange
检索 URL,并将检索到的 URL 放入 dstRange
。
function sample() {
var srcRange = "Sheet1!A1:A10"; // Please set the source range you want to use.
var dstRange = "Sheet2!B1:B10"; // Please set the destination range you want to use.
var ss = SpreadsheetApp.getActiveSpreadsheet();
var range = ss.getRange(srcRange);
var orgNumberFormats = range.getNumberFormats();
var values = range.setNumberFormat("@").getRichTextValues();
var urls = values.map(r => r.map(c => c && (c.getLinkUrl() || "")));
range.setNumberFormats(orgNumberFormats);
ss.getRange(dstRange).setValues(urls);
}
srcRange
的数字格式,将单元格值转换为字符串值,并从 srcRange
检索富文本值。然后,检索 URL 并将 URL 放入 dstRange
。如果您的错误已从显示脚本中删除,则可以使用以下脚本。但是,在这种情况下,当单元格值为数字值时,即使单元格具有超链接,也不会返回任何值。请注意这一点。
function GETLINK(input) {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange(input);
var value = range.getRichTextValue();
return value && value.getLinkUrl(0, 1);
}
对我来说同样的情况(我想要提取的带有 URL 的单元格都是数字),Tanaike 的答案比简单地选择所有带有数字的单元格并单击格式 -> 数字 -> 纯文本更复杂。脚本现在可以运行了。感谢 Tanaike 指出脚本的问题 - 它无法处理包含数字的单元格的链接!