我从网站上复制了一系列超链接,然后将它们粘贴在Google工作表中。值显示为链接文本,而不是超链接公式,并且仍然正确链接。对于每一行,我尝试仅提取URL(不是友好文本)并将其插入相邻列。如何使用公式来实现这一目标?
例如:
=SOMEFUNCTION(cellThatHoldsLink, returnedURLOnly)
This and similar scenarios不适用,因为粘贴的数据不是公式。 我将接受脚本(GAS)解决方案或任何解决方案,但更愿意使用公式。我发现了几十个HYPERLINK操作脚本,但在这个特定场景中没有任何内容,甚至没有找到如何访问持有该URL的属性。感谢。
答案 0 :(得分:3)
如果您乐意使用Google Apps脚本,请使用以下功能从文本中获取超链接。当你通过单元格时,你应该发送双引号。例如:=GETURL("A4")
获取A4超链接。
function GETURL(input) {
var range = SpreadsheetApp.getActiveSheet().getRange(input);
var url = /"(.*?)"/.exec(range.getFormulaR1C1())[1];
return url;
}
例如,请参阅here。
编辑:忽略此答案。这仅适用于在单元格中链接网址的情况。
答案 1 :(得分:3)
这可以通过将链接粘贴到 按钮中或使用 reddit 按钮自动创建的链接来完成,方法是转到工具 -> 脚本编辑器并创建以下脚本:
function GETLINK(input){ return SpreadsheetApp.getActiveSheet().getRange(input).getRichTextValue().getLinkUrl(); }
如果单元格 A1 有链接,您需要将其引用为 =GETLINK("A1")
如果您有很多链接,则不会动态更新,因此请使用 =GETLINK(cell("Address",A1))
来解决这个问题。
感谢 morrisjr1989 {{3}}。
答案 2 :(得分:2)
内置的SpreadsheetApp服务似乎不支持提取此类网址,但“Advanced” Sheets服务可以支持。
根据Google's instructions启用高级表格服务,然后尝试以下代码:
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
}
}
}
}
}
}
这会创建一个名为EXTRACT_URL
的{{3}},您应该通过对包含该链接的单元格的引用来调用它;例如,=EXTRACT_URL(B3)
。
不幸的是,它不会立即起作用,因为自定义函数的高级表格服务custom function。因此,此脚本将一个名为“Extract URLs”的菜单添加到电子表格菜单栏,其中一个菜单项标记为“Process = EXTRACT_URL(A1)formula”。单击它时,它将使用URL本身替换EXTRACT_URL
函数的所有用法。
答案 3 :(得分:2)
在2020年进行一些更新之后,我在互联网上找到的所有代码都被破坏了,所以这是我的贡献:
const path = require('path');
...
app: path.join(__dirname, '../other-project/src/index.js'),
答案 4 :(得分:1)
你可以使用importxml来输入整个数据表及其内容:
=IMPORTXML(A1,"//tr")
在它旁边我们拉入了标签中的url字符串
=IMPORTXML(A1,"//tr/td[1]/a/@href")
最后将字符串与原始域连接起来以创建超链接
=ARRAYFORMULA("http://www.bnilouisiana.com/"&INDIRECT("A2:A"&COUNTA(A2:A)))
答案 5 :(得分:1)
找到一个有效on Google Groups的答案(特洛伊):
可以通过脚本完成,但我现在没有时间。 :)
答案 6 :(得分:1)
如果在另一个单元格中将超级链接指定为公式(例如,假设单元格A1包含公式=HYPERLINK("https://www.wikipedia.org/","Wikipedia")
),则可以使用正则表达式提取链接文本。您所需要做的就是:
=REGEXEXTRACT(FORMULATEXT(A1),"""(.+)"",")
此公式将得出结果:
https://www.wikipedia.org/
不需要自定义功能。
答案 7 :(得分:1)
所以,通过一些研究,我可以看到谷歌表格中有两种类型的链接
=HYPERLINK=("www.google.com")
之类的公式)对于第一种,您可以直接使用 @frederico-schardong 的 linkURL。
对于第二类,您可以先使用 extract URLs 插件,然后使用 linkURL
。
答案 8 :(得分:0)
I was able to solve this for Jotform in a very simple way.
I was looking to include the Edit link in a query, but it would only give me the text "Edit Submission."
However, I noticed that I had the form ID in Column R. I was then able copy the JotForm link and combine it with the cell reference "https://www.jotform.com/edit/"&R2
答案 9 :(得分:0)
做到这一点的快速方法-如果单元格行受到限制--->
如果您对此还有更多了解,或者可以选择单元格来完成。让我知道
答案 10 :(得分:0)
Ryan Tarpine的“例子”大有帮助。谢谢!
使用以下代码,您可以在选定范围内用标准HYPERLINK公式替换所有嵌入的链接。请注意,必须激活Advanced Sheets Service。
function embeddedURLsToHyperlink() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
var rows = sheet.getActiveRange().getValues();
var z = sheet.getActiveRange().getRowIndex();
var s = sheet.getActiveRange().getColumn();
for (var r = 0; r < rows.length; r++) {
var row = rows[r];
for (var c = 0; c < row.length; c++) {
var val = row[c];
if (val) {
var targetRange = sheet.getRange(r+z, c+s).getA1Notation();
var result = Sheets.Spreadsheets.get(spreadsheet.getId(), {
ranges: sheet.getName() + "!" + targetRange,
fields: 'sheets.data.rowData.values'
});
if (result.sheets[0].data[0].rowData[0].values[0].hyperlink) {
var url = result.sheets[0].data[0].rowData[0].values[0].hyperlink;
var text = result.sheets[0].data[0].rowData[0].values[0].effectiveValue.stringValue;
sheet.getRange(r + z, c + s).setFormula('=HYPERLINK("' + url + '","' + text + '")');
}
}
}
}
}
我要处理整张纸,请用以下代码替换第4-6行:
var rows = sheet.getDataRange().getValues();
var z = 1;
var s = 1;