例如,我尝试从单元格 A10 跳转到单元格 E600:
我已尝试绘制一个分配给脚本的矩形。
它偶尔会起作用,但大多数时候都会失败。
有没有更简单的方法来实现这一点,而无需对值进行硬编码?
function jumpToCell(fromcell, tocell) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var jumps = {
A10: "E600",
A11: "E550",
A12: "E500",
A13: "E450",
A14: "E400",
A15: "E350",
A16: "E300",
A17: "E250",
A18: "E200",
A19: "E150",
A20: "E100",
A21: "E50",
E600: "A10",
E550: "A11",
E500: "A12",
E450: "A13",
E400: "A14",
E350: "A15",
E300: "A16",
E250: "A17",
E200: "A18",
E150: "A19",
E100: "A20",
E50: "A21",
};
Logger.log("fromcell: " + fromcell + " tocell: " + tocell);
if (jumps[fromcell] && jumps[fromcell] === tocell) {
Logger.log("Jumping to: " + tocell);
sheet.getRange(tocell).activate();
} else if (jumps[fromcell]) {
Logger.log("Jumping to mapped destination: " + jumps[fromcell]);
sheet.getRange(jumps[fromcell]).activate();
} else {
Logger.log("No jump found for: " + fromcell);
}
}
function jumpFromA10ToE600() {
Logger.log("Jump from A10 to E600 triggered");
jumpToCell("A10", "E600");
}
function jumpFromE600ToA10() {
Logger.log("Jump from E600 to A10 triggered");
jumpToCell("E600", "A10");
}
function jumpFromA10ToE600() {
jumpToCell("A10", "E600");
}
function jumpFromA11ToE550() {
jumpToCell("A11", "E550");
}
function jumpFromA12ToE500() {
jumpToCell("A12", "E500");
}
function jumpFromA13ToE450() {
jumpToCell("A13", "E450");
}
function jumpFromA14ToE400() {
jumpToCell("A14", "E400");
}
function jumpFromA15ToE350() {
jumpToCell("A15", "E350");
}
function jumpFromA16ToE300() {
jumpToCell("A16", "E300");
}
function jumpFromA17ToE250() {
jumpToCell("A17", "E250");
}
function jumpFromA18ToE200() {
jumpToCell("A18", "E200");
}
function jumpFromA19ToE150() {
jumpToCell("A19", "E150");
}
function jumpFromA20ToE100() {
jumpToCell("A20", "E100");
}
function jumpFromA21ToE50() {
jumpToCell("A21", "E50");
}
function jumpFromE600ToA10() {
jumpToCell("E600", "A10");
}
function jumpFromE550ToA11() {
jumpToCell("E550", "A11");
}
function jumpFromE500ToA12() {
jumpToCell("E500", "A12");
}
function jumpFromE450ToA13() {
jumpToCell("E450", "A13");
}
function jumpFromE400ToA14() {
jumpToCell("E400", "A14");
}
function jumpFromE350ToA15() {
jumpToCell("E350", "A15");
}
function jumpFromE300ToA16() {
jumpToCell("E300", "A16");
}
function jumpFromE250ToA17() {
jumpToCell("E250", "A17");
}
function jumpFromE200ToA18() {
jumpToCell("E200", "A18");
}
function jumpFromE150ToA19() {
jumpToCell("E150", "A19");
}
function jumpFromE100ToA20() {
jumpToCell("E100", "A20");
}
function jumpFromE50ToA21() {
jumpToCell("E50", "A21");
}
还尝试了getUI()
如下评论:
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu("Weeks")
.addItem("Week 1", "jumpToE50")
.addItem("Week 2", "jumpToE100")
.addItem("Week 3", "jumpToE150")
.addItem("Week 4", "jumpToE200")
.addItem("Week 5", "jumpToE250")
.addItem("Week 6", "jumpToE300")
.addItem("Week 7", "jumpToE350")
.addItem("Week 8", "jumpToE400")
.addItem("Week 9", "jumpToE450")
.addItem("Week 10", "jumpToE500")
.addItem("Week 11", "jumpToE550")
.addItem("Week 12", "jumpToE600")
.addToUi();
}
function jumpToCell(target) {
if (!target || target.trim() === "") {
Logger.log("Error: Target cell is null or empty.");
return;
}
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
try {
Logger.log("Jumping to cell: " + target);
sheet.getRange(target).activate();
} catch (e) {
Logger.log("Invalid cell reference: " + target);
}
}
function jumpToE600() {
jumpToCell("E600");
}
function jumpToE550() {
jumpToCell("E550");
}
function jumpToE500() {
jumpToCell("E500");
}
function jumpToE450() {
jumpToCell("E450");
}
function jumpToE400() {
jumpToCell("E400");
}
function jumpToE350() {
jumpToCell("E350");
}
function jumpToE300() {
jumpToCell("E300");
}
function jumpToE250() {
jumpToCell("E250");
}
function jumpToE200() {
jumpToCell("E200");
}
function jumpToE150() {
jumpToCell("E150");
}
function jumpToE100() {
jumpToCell("E100");
}
function jumpToE50() {
jumpToCell("E50");
}
这可行,但还是太慢了。应该是一种更简单的方法。
使用 .getUI() 创建菜单
我将把我的评论作为答案发布。
Class UI 帮助用户在编辑器用户界面上创建自定义菜单栏,使他们能够添加个性化功能。
示例代码:
这可能有助于返回到单元格
A10
以A21
使用for of 循环。参考:
类 UI
您还可以使用命名函数生成指向其他单元格的超链接。
id:id 参数是目标工作表的 SheetID 或 gid 编号,显示在 URL 中。最好有这些编号,但如果没有,则可以使用此脚本来获取它。
range:可以是下列任意一项:
标签:超链接显示的标签。
这些都在这个电子表格中进行了演示:JUMP_TO
在 Google 表格中,可以将 Google Apps 脚本函数分配给图像或绘图 - 请参阅Google 表格中的可点击图像和绘图。不幸的是,使用分配的脚本单击图像/绘图不会传递事件对象,就像简单且可安装的触发器一样。
如果您不想为每个图像/绘图都设置一个功能,那么一个选项是使用复选框和编辑触发器,而不是使用指定功能的图像/绘图。
快速从电子表格中的一个位置移动到另一个位置的一种简单方法是使用命名范围。它们不是“硬编码的”,即使您添加或删除行,它们仍会指向同一目标。
在每个目标位置创建命名范围后,您就可以在脚本中使用范围名称,方式与
"A1"
类型范围引用相同:或者,使用一个
onEdit(e)
简单的触发器,当您完成编辑前一个单元格时,该触发器会自动激活“下一个”单元格。请参阅我的jumpFromCellToCell_()脚本以获取示例代码。如果您需要保持跳转顺序的灵活性,您可以通过单击数据 > 命名范围侧栏中的范围名称直接跳转到任何目标,或者使用左上角的名称框。按Control+J,输入目标名称的前几个字母,然后按Enter即可跳转到那里。