例如,当单元格“E1”有SD-1234时,使用=HYPERLINK("https://demo.atlassian.net/browse/"&E1, E1),其值为SD-1234,超链接为https://demo.atlassian.net/browse/SD-1234。但在这种情况下,结果不能直接显示在单元格“E1”中。当你想通过https://demo.atlassian.net/browse/SD-1234的超链接直接将单元格“E1”中的SD-1234转换为SD-1234,下面的示例脚本怎么样?
示例脚本:
请复制并粘贴以下脚本并在脚本编辑器中运行该函数。在使用之前,请设置工作表名称。
此示例脚本从“E”列中的SD-1234 转换为=HYPERLINK("https://demo.atlassian.net/browse/SD-1234", "SD-1234")。
function sample1() {
const sheetName = "Sheet1"; // Please set the sheet name.
const baseUrl = "https://demo.atlassian.net/browse/";
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
const range = sheet.getRange("E1:E" + sheet.getLastRow());
const values = range.getValues().map(([e]) => [`=HYPERLINK("${baseUrl}${e}", "${e}")`]);
range.setFormulas(values);
}
此示例脚本将“E”列中的SD-1234 转换为SD-1234,超链接为https://demo.atlassian.net/browse/SD-1234。在这种情况下,不使用公式。
function sample2() {
const sheetName = "Sheet1"; // Please set the sheet name.
const baseUrl = "https://demo.atlassian.net/browse/";
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
const range = sheet.getRange("E1:E" + sheet.getLastRow());
const values = range.getValues().map(([e]) => [SpreadsheetApp.newRichTextValue().setText(e).setLinkUrl(baseUrl + e).build()]);
range.setRichTextValues(values);
}
注意:
- 如果您的电子表格有第一个标题行,请将
"E1:E" + sheet.getLastRow() 修改为"E2:E" + sheet.getLastRow()。
参考资料:
新增1:
来自您的以下 cmets,
我必须设置工作表名称吗?我有几张我一直希望应用此功能的工作表(我目前在文件中有 20 多张工作表)。
另外,我已经将它输入到脚本编辑器中进行测试,从这里我该怎么做?我看不到任何保存...而且它没有在我的工作表上运行。每当在单元格中输入值时,如何将其应用于我的工作表以自动运行?
当上述情况反映在脚本中时,变成如下。
示例脚本:
请将以下脚本复制并粘贴到脚本编辑器并保存。请编辑工作表的“E”列。这样,单元格就有了与输入文本的超链接。
function onEdit(e) {
const sheetNames = ["Sheet1", "Sheet2",,,]; // Please set the sheet names you want to run the script.
const column = 5; // Column E. From your question, this script run for the column "E".
const {range} = e;
const sheet = range.getSheet();
const baseUrl = "https://demo.atlassian.net/browse/";
if (!sheetNames.includes(sheet.getSheetName()) || range.columnStart != column) return;
const values = range.getValues().map(([e]) => [SpreadsheetApp.newRichTextValue().setText(e).setLinkUrl(baseUrl + e).build()]);
range.setRichTextValues(values);
}
如果要对所有工作表运行脚本,可以使用以下脚本。
function onEdit(e) {
const column = 5; // Column E. From your question, this script run for the column "E".
const {range} = e;
const sheet = range.getSheet();
const baseUrl = "https://demo.atlassian.net/browse/";
if (range.columnStart != column) return;
const values = range.getValues().map(([e]) => [SpreadsheetApp.newRichTextValue().setText(e).setLinkUrl(baseUrl + e).build()]);
range.setRichTextValues(values);
}
新增2:
如果您想通过一个脚本运行将脚本运行到所有工作表的“E”列,也可以使用以下脚本。
示例脚本:
此示例脚本针对特定工作表运行。
function myFunction() {
const sheetNames = ["Sheet1", "Sheet2",,,]; // Please set sheet names you want to run the script.
const baseUrl = "https://demo.atlassian.net/browse/";
SpreadsheetApp.getActiveSpreadsheet().getSheets().forEach(sheet => {
if (!sheetNames.includes(sheet.getSheetName())) return;
const range = sheet.getRange("E1:E" + sheet.getLastRow());
const values = range.getValues().map(([e]) => [SpreadsheetApp.newRichTextValue().setText(e).setLinkUrl(baseUrl + e).build()]);
range.setRichTextValues(values);
});
}
此示例脚本适用于所有工作表。
function myFunction() {
const baseUrl = "https://demo.atlassian.net/browse/";
SpreadsheetApp.getActiveSpreadsheet().getSheets().forEach(sheet => {
const range = sheet.getRange("E1:E" + sheet.getLastRow());
const values = range.getValues().map(([e]) => [SpreadsheetApp.newRichTextValue().setText(e).setLinkUrl(baseUrl + e).build()]);
range.setRichTextValues(values);
});
}