javascript - 如何将用户输入替换为用户输入 + URL,同时使其成为 Google Apps 脚本/Google 表格的超链接?
问题描述
[目标] 我在一个包含多行的表格中创建了一个专用列,供用户在单元格中输入某些 ID。我希望能够将这些 ID 与特定的固定 URL 结合起来,这样我们就可以根据每个 ID 访问特定的站点。
[问题] 我创建了以下代码,我知道它允许使用设置 URL,但是它没有将URL 与用户提供的 ID 结合起来,所以它不允许我完成 URL。换句话说,为了完成 URL,我们需要固定的 URL(例如:example.com)和用户提供的 ID(例如:12345)并使其可点击(例如:example.com/12345)。
[问题] 有没有办法使以下步骤仅在输入 ID 时发生?如果没有,我想让单元格空白。
- 用户将 ID 设置为单元格(例如:12345)。
- Google Apps 脚本以某种方式复制 ID,然后将其替换为带有 ID 的固定显示文本(例如:转到 12345 的链接)。
- Google Apps 脚本以某种方式使用固定 URL (example.com/) 和 ID(例如:12345),并将它们组合起来(例如:example.com/12345)。
- 用户不会看到完整的 URL,但是他们会看到显示文本(转到 12345 的链接),如果他们点击链接,它会将他们带到特定于ID。
// Global veriables
var app = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Status");
function onEdit(e) {
var setLink = app.getRange("M16:M");
setLink.setValue('=HYPERLINK("https://example.com/","Go to link for ")');
}
解决方案
解释:
您的目标是用M16:M
在该单元格上编辑时包含该值的超链接替换范围中的值。
首先,您需要利用事件对象。
在编辑范围内
M16:M
的单元格时,以下脚本将使用超链接替换该值,该超链接将包含先前的值id
作为url
.如果删除
M16:M
url 中的值会自动被删除。
解决方案:
function onEdit(e) {
const ss = e.source;
const as = ss.getActiveSheet();
const rng = e.range;
const row = rng.getRow();
const col = rng.getColumn();
if (as.getName()=='Status' && col == 13 && row > 15){
if (rng.getValue()!=''){
rng.setValue(`=HYPERLINK("https://example.com/${rng.getValue()}","Go to link for ${rng.getValue()}")`)
}
else{
rng.clearContent();
}
}
}
当心:
- 这是一个触发器,当您编辑sheet
onEdit
范围内的单元格时将自动激活。您不能手动执行它,它不会那样工作。在这里查看一个简单的触发器是如何工作的。M16:M
Status
onEdit
插图:
推荐阅读
- ag-grid - AG-Grid + React - 添加新行时忽略网格排序
- cordova - 使用 Cordova 将 Spring MVC 迁移到移动设备
- c# - 如何定义显示的数据?
- c# - HashSet exceptWith 不适用于复杂类型
- android - Android Camera2 可执行文件无法获取帧
- r - 如何通过 for 循环更改列类型?
- vba - 宏如何写入工作表中的选定单元格
- c - 无法理解 fork() 和进程树
- c# - C# 正则表达式拆分引号和逗号语法错误
- python - py4j.protocol.Py4JJavaError: 调用 z:org.apache.spark.mllib.api.python.SerDe.pythonToJava 时出错