【发布时间】:2014-04-15 16:17:25
【问题描述】:
我一直在尝试将打开电子表格时的视图移动到当前日期。
这是一个日程安排电子表格,每个月都有一张工作表,日期列在第一列向下。
我已使用以下代码成功地将工作表更改为当前月份:
function gotoCurrentMonth() {
var monthTabs = [ "January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December" ];
var month = (new Date()).getMonth();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(monthTabs[month]);
sheet.activate();
}
这在添加到 onOpen 函数时没有问题。
但是,以下代码仅在通过脚本编辑器手动触发时才有效,在 gotoCurrentMonth 函数之后调用时似乎不会触发。
function gotoCurrentDay() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
//Get current day value from the MATCH spreadsheet function
//Example of cell value: 73
var range = sheet.getRange(2, 2).getValue();
//Go to bottom cell so that when it goes back up to current day, it's at the top of the screen
sheet.setActiveCell(sheet.getRange(sheet.getLastRow(), 1));
Logger.log("Select Last Row: " + sheet.getLastRow());
//Go back up to current day cell
sheet.setActiveCell(sheet.getRange(range, 1));
Logger.log("Select Current Day Row: " + range);
}
当电子表格打开时,电子表格将切换到 March 工作表,但所选单元格不会移动。坐在三月表的顶部。
如果我随后将光标移回 1 月 1 日(就像打开时通常那样)并在全部加载后手动运行 onOpen 函数,那么它可以正常工作并正确选择当前日期。
我的 onOpen 函数:
function onOpen() {
gotoCurrentMonth();
gotoCurrentDay();
};
如果手动或通过自动触发器激活 onOpen 函数,为什么它的行为会有所不同?
【问题讨论】:
-
我猜您的电子表格中的每张表格都有包含匹配公式的单元格 2,2?对吗?
-
没错,但是匹配公式将在非当前月份的月份返回 #N/A。仅在 3 月,它目前有 73 个。
-
也许尝试在两次调用之间添加一个电子表格App.flush() 以强制工作表转到正确的页面,然后再尝试获取单元格 2,2 中的值
-
flush似乎没有帮助,我把它放在gotoCurrentMonth和gotoCurrentDay之间的onOpen函数中。值得注意的是,gotoCurrentDay 甚至不会将活动单元格移动到最后一个单元格,这不依赖于从单元格中获取值。我将它移动到最后一个单元格并备份,以便当前日期将位于屏幕顶部。但正如我所说,即使那样也不会发生。
-
好的,感谢测试。如果我有什么想法,我会尽快找到并通知你。
标签: google-apps-script google-sheets