iam*_*toc 15 formula google-sheets
我从网站上复制了一系列超链接并将它们粘贴在Google工作表中.值显示为链接文本,而不是超链接公式,并且仍然正确链接.对于每一行,我试图仅提取URL(不是友好文本)并将其插入相邻列.如何使用公式实现这一目标?
例如:
=SOMEFUNCTION(cellThatHoldsLink, returnedURLOnly)
Run Code Online (Sandbox Code Playgroud)
此类和类似方案不适用,因为粘贴的数据不是公式.我将接受脚本(GAS)解决方案或任何解决方案,但更愿意使用公式.我发现了几十个HYPERLINK操作脚本,但在这个特定场景中没有任何内容,甚至没有找到如何访问持有该URL的属性.谢谢.
MrG*_*MrG 24
这可以通过将它们粘贴到或与自动创建的链接来完成
按钮,方法是转到“工具”->“脚本编辑器”并创建以下脚本:
函数 GETLINK(输入){
返回 SpreadsheetApp.getActiveSheet().getRange(input).getRichTextValue().getLinkUrl();
}
如果单元格 A1 有链接,您将需要引用它,因为=GETLINK("A1")
如果您有很多链接,则不会动态更新,因此请使用=GETLINK(cell("Address",A1))它来解决这个问题。
感谢reddit上的 morrisjr1989 。
Fre*_*ong 19
在 2020 年的一些更新之后,我在互联网上找到的所有代码都被破坏了,所以这是我的贡献:
/**
* Returns the URL of a hyperlinked cell, if it's entered with control + k.
* Author: @Frederico Schardong based on https://support.google.com/docs/thread/28558721?hl=en&msgid=28927581 and https://github.com/andrebradshaw/utilities/blob/master/google_apps/convertHiddenLinks.gs
* Supports ranges
*/
function linkURL(reference) {
var sheet = SpreadsheetApp.getActiveSheet();
var formula = SpreadsheetApp.getActiveRange().getFormula();
var args = formula.match(/=\w+\((.*)\)/i);
try {
var range = sheet.getRange(args[1]);
}
catch(e) {
throw new Error(args[1] + ' is not a valid range');
}
var formulas = range.getRichTextValues();
var output = [];
for (var i = 0; i < formulas.length; i++) {
var row = [];
for (var j = 0; j < formulas[0].length; j++) {
row.push(formulas[i][j].getLinkUrl());
}
output.push(row);
}
return output
}
Run Code Online (Sandbox Code Playgroud)
Jor*_*dan 15
如果您的超链接在另一个单元格中指定为公式 - 例如,假设单元格 A1 包含公式=HYPERLINK("https://www.wikipedia.org/","Wikipedia"),您可以使用正则表达式提取链接文本。您需要做的就是:
=REGEXEXTRACT(FORMULATEXT(A1),"""(.+)"",")
这个公式将产生结果:
https://www.wikipedia.org/
无需自定义功能。
内置的SpreadsheetApp服务似乎不支持提取此类 URL,但“高级”表格服务支持。
根据Google 的说明启用 Advanced Sheets 服务,然后尝试以下代码:
function onOpen() {
var menu = SpreadsheetApp.getUi().createMenu("Extract URLs");
menu.addItem("Process =EXTRACT_URL(A1) formulas", "processFormulas");
menu.addToUi();
}
function EXTRACT_URL() {
return SpreadsheetApp.getActiveRange().getFormula();
}
function processFormulas() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
var rows = sheet.getDataRange().getFormulas();
for (var r = 0; r < rows.length; r++) {
var row = rows[r];
for (var c = 0; c < row.length; c++) {
var formula = row[c];
if (formula) {
var matched = formula.match(/^=EXTRACT_URL\((.*)\)$/i);
if (matched) {
var targetRange = matched[1];
if (targetRange.indexOf("!") < 0) {
targetRange = sheet.getName() + "!" + targetRange;
}
var result = Sheets.Spreadsheets.get(spreadsheet.getId(), {
ranges: targetRange,
fields: 'sheets.data.rowData.values.hyperlink'
});
try {
var value = result.sheets[0].data[0].rowData[0].values[0].hyperlink;
sheet.getRange(r + 1, c + 1).setValue(value);
} catch (e) {
// no hyperlink; just ignore
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这将创建一个名为的自定义函数EXTRACT_URL,您应该使用对包含链接的单元格的引用来调用该函数;例如,=EXTRACT_URL(B3)。
不幸的是,它不能立即工作,因为高级表格服务不能由自定义函数直接使用。因此,此脚本向电子表格菜单栏添加了一个名为“提取 URL”的菜单,其中一个菜单项标记为“处理 =EXTRACT_URL(A1) 公式”。当您单击它时,它将EXTRACT_URL用 URL 本身替换该函数的所有使用。
您可以使用 importxml 提取整个数据表及其内容:
=IMPORTXML(A1,"//tr")
Run Code Online (Sandbox Code Playgroud)
在它旁边,我们在标签中提取了 url 字符串
=IMPORTXML(A1,"//tr/td[1]/a/@href")
Run Code Online (Sandbox Code Playgroud)
最后将字符串与原始域连接起来以创建超链接
=ARRAYFORMULA("http://www.bnilouisiana.com/"&INDIRECT("A2:A"&COUNTA(A2:A)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29538 次 |
| 最近记录: |