Apps脚本:如何从没有公式的单元格获取超链接
Apps Script: how to get hyperlink from a cell where there is no formula
我有一个 sheet 超链接是在单元格中设置的,但 不是通过公式 。单击单元格时,在 "fx" 栏中它仅显示值。
我在网上搜索,但到处都是,信息是使用getFormula()
提取超链接。
但在我的例子中根本没有公式集。
我可以看到图片中的超链接,但 "formula/fx" 栏中没有。
如何使用 Apps 脚本或任何公式获取该单元格的超链接?
当Excel包含超链接单元格的文件转换为Google电子表格时,也可以看到这种情况。就我而言,我使用 Sheets API 检索 URL。示例脚本如下。我认为可能有几种解决方案。所以请将此视为其中之一。
当您使用此脚本时,请在高级 Google 服务和 API 控制台中启用表格 API。您可以在 .
查看如何启用表格 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.
}
}
}
}
注:
- 请设置
spreadsheetId
.
Sheet1!A1:A10
是一个示例。请根据您的情况设置范围。
- 在这种情况下,
rowData
的每个元素对应于行的索引。 values
的每个元素对应列的索引
参考文献:
如果这不是您想要的,请告诉我。我想修改一下。
当一个单元格只有一个 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:
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) ;
大家好,
我希望这可以帮助您节省一些开发时间,因为它很难确定...
此自定义函数将采用 Google 表格单元格中的所有超链接,并且 return 它们作为基于第二个参数格式化的文本 [JSON|HTML|NAMES_ONLY|URLS_ONLY].
参数:
cellRef :您必须为单元格提供 A1 样式的单元格引用。
提示:要在没有 hard-coding 的单元格中执行此操作
字符串引用,可以使用 CELL 函数。
例如:“=linksToTEXT(CELL(“地址”,C3))”
style :定义输出字符串的格式。
有效参数是:[JSON|HTML|NAMES_ONLY|URLS_ONLY].
示例脚本
/**
* Custom Google Sheet Function to convert rich-text
* links into Readable links.
* Author: Isaac Dart ; 2022-01-25
*
* Params
* cellRef : You must provide an A1 style cell reference to a cell.
* Hint: To do this within a cell without hard-coding
* a string reference, you can use the CELL function.
* eg: "=linksToTEXT(CELL("address",C3))"
*
* style : Defines the formatting of the output string.
* Valid arguments are : [JSON|HTML|NAMES_ONLY|URLS_ONLY].
*
*/
function convertCellLinks(cellRef = "H2", style = "JSON") {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var cell = sheet.getRange(cellRef).getCell(1,1);
var runs = cell.getRichTextValue().getRuns();
var ret = "";
var lf = String.fromCharCode(10);
runs.map(r => {
var _url = r.getLinkUrl();
var _text = r.getText();
if (_url !== null && _text !== null) {
_url = _url.trim(); _text = _text.trim();
if (_url.length > 0 && _text.length > 0) {
switch(style.toUpperCase()) {
case "HTML": ret += '<a href="' + _url + '">' + _text + '}</a>' + lf; break;
case "TEXT": ret += _text + ' : "' + _url + '"' + lf; break;
case "NAMES_ONLY" : ret += _text + lf; break;
case "URLS_ONLY" : ret += _url + lf; break;
//JSON default : ...
default: ret += (ret.length>0?(','+ lf): '') +'{name : "' + _text + '", url : "' + _url + '"}' ; break;
}
ret += lf;
}
}
});
if (style.toUpperCase() == "JSON") ret = '[' + ret + ']';
//Logger.log(ret);
return ret;
}
干杯,
以撒
我有一个 sheet 超链接是在单元格中设置的,但 不是通过公式 。单击单元格时,在 "fx" 栏中它仅显示值。
我在网上搜索,但到处都是,信息是使用getFormula()
提取超链接。
但在我的例子中根本没有公式集。
我可以看到图片中的超链接,但 "formula/fx" 栏中没有。
如何使用 Apps 脚本或任何公式获取该单元格的超链接?
当Excel包含超链接单元格的文件转换为Google电子表格时,也可以看到这种情况。就我而言,我使用 Sheets API 检索 URL。示例脚本如下。我认为可能有几种解决方案。所以请将此视为其中之一。
当您使用此脚本时,请在高级 Google 服务和 API 控制台中启用表格 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.
}
}
}
}
注:
- 请设置
spreadsheetId
. Sheet1!A1:A10
是一个示例。请根据您的情况设置范围。- 在这种情况下,
rowData
的每个元素对应于行的索引。values
的每个元素对应列的索引
参考文献:
如果这不是您想要的,请告诉我。我想修改一下。
当一个单元格只有一个 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:
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) ;
大家好,
我希望这可以帮助您节省一些开发时间,因为它很难确定...
此自定义函数将采用 Google 表格单元格中的所有超链接,并且 return 它们作为基于第二个参数格式化的文本 [JSON|HTML|NAMES_ONLY|URLS_ONLY].
参数:
cellRef :您必须为单元格提供 A1 样式的单元格引用。 提示:要在没有 hard-coding 的单元格中执行此操作 字符串引用,可以使用 CELL 函数。 例如:“=linksToTEXT(CELL(“地址”,C3))”
style :定义输出字符串的格式。 有效参数是:[JSON|HTML|NAMES_ONLY|URLS_ONLY].
示例脚本
/**
* Custom Google Sheet Function to convert rich-text
* links into Readable links.
* Author: Isaac Dart ; 2022-01-25
*
* Params
* cellRef : You must provide an A1 style cell reference to a cell.
* Hint: To do this within a cell without hard-coding
* a string reference, you can use the CELL function.
* eg: "=linksToTEXT(CELL("address",C3))"
*
* style : Defines the formatting of the output string.
* Valid arguments are : [JSON|HTML|NAMES_ONLY|URLS_ONLY].
*
*/
function convertCellLinks(cellRef = "H2", style = "JSON") {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var cell = sheet.getRange(cellRef).getCell(1,1);
var runs = cell.getRichTextValue().getRuns();
var ret = "";
var lf = String.fromCharCode(10);
runs.map(r => {
var _url = r.getLinkUrl();
var _text = r.getText();
if (_url !== null && _text !== null) {
_url = _url.trim(); _text = _text.trim();
if (_url.length > 0 && _text.length > 0) {
switch(style.toUpperCase()) {
case "HTML": ret += '<a href="' + _url + '">' + _text + '}</a>' + lf; break;
case "TEXT": ret += _text + ' : "' + _url + '"' + lf; break;
case "NAMES_ONLY" : ret += _text + lf; break;
case "URLS_ONLY" : ret += _url + lf; break;
//JSON default : ...
default: ret += (ret.length>0?(','+ lf): '') +'{name : "' + _text + '", url : "' + _url + '"}' ; break;
}
ret += lf;
}
}
});
if (style.toUpperCase() == "JSON") ret = '[' + ret + ']';
//Logger.log(ret);
return ret;
}
干杯,
以撒