我有一个包含超链接公式的列,例如:
=HYPERLINK("http://example.com", "Link")
我想要添加一列,只包含第一列中的URL(以文本形式呈现),例如:
http://example.com
是否有一种功能可以从超链接中提取网址?我也考虑过在最后一列中使用SPLIT/SUBSTITUTE获取第一列的公式文本并将其剪切,但我不确定是否可以将一个字段代码放入另一个字段。
我有一个包含超链接公式的列,例如:
=HYPERLINK("http://example.com", "Link")
我想要添加一列,只包含第一列中的URL(以文本形式呈现),例如:
http://example.com
是否有一种功能可以从超链接中提取网址?我也考虑过在最后一列中使用SPLIT/SUBSTITUTE获取第一列的公式文本并将其剪切,但我不确定是否可以将一个字段代码放入另一个字段。
试试这些公式
A2=index(SPLIT(SUBSTITUTE(FORMULATEXT(A1),"=HYPERLINK(""",""),""","""),1,1)
例子
A1=HYPERLINK("http://example.com", "Link")
结果是
A2=http://example.com
我刚刚创建了这个脚本并且它可以正常工作。
function URL(reference) {
var sheet = SpreadsheetApp.getActiveSheet();
var formula = SpreadsheetApp.getActiveRange().getFormula();
var args = formula.match(/=\w+\((.*)\)/i);
try {
var range = sheet.getRange(args[1]).getRichTextValue().getLinkUrl();
}
catch(e) {
throw new Error(args[1] + ' is not a valid range');
}
return range;
}
In Code.gs, paste the following and save:
function EXTRACT_URL(input) {
var range = SpreadsheetApp.getActiveSheet().getRange(input);
var re = /^.+?\(\"(.+?)\",.+?$/;
if (input.indexOf(':') != -1) {
var formulas = range.getFormulas();
for (var i in formulas) {
for (var j in formulas[i]) {
formulas[i][j] = formulas[i][j].replace(re, "$1");
}
}
return formulas;
} else {
return range.getFormula().replace(re, "$1");
}
}
这将创建一个自定义函数。在您的Google表格中,您可以像使用任何其他函数一样使用此函数;但是,有一个注意事项,就是您必须将单元格放在引号中,例如:
=EXTRACT_URL("A1")
=EXTRACT_URL("A1:B10")
您可以使用Google Apps Script和宏、菜单和自定义函数的组合来从单元格公式中提取超链接的值。
以下是其工作原理:
Code.gs
中突出显示并删除所有代码Code.gs
中的所有内容,该内容来自此Google Docs帮助论坛主题=HYPERLINK
函数的电子表格中的单元格、行或列提取->用文本字符串替换公式
以启动脚本左侧部分:
查找 =HYPERLINK("
并勾选在公式中搜索
(如果您想断开链接,请在*替换为*中放置'
。)
右侧部分:
查找 ".+
并勾选使用正则表达式搜索和在公式中搜索。
您可以使用FORMULATEXT获取超链接公式单元格的文本,然后使用正则表达式提取URL。
=REGEXEXTRACT(FORMULATEXT(A1), "^=HYPERLINK(""([^""]+)")