作为编码的新手,我用我的代码遇到了这个问题: 我使用Google App Script [编辑:更正了Google App Engine到Google App Script]来浏览时间戳列表并过滤当前月份的邮票。因此,我加载电子表格,相应的表格,并将所有行的数据作为对象。
在下一步中,我会浏览对象的所有元素,并检查它们是否包含当前日期。
/* Initial data */
var email = "name@domain.com";
var spreadsheet = SpreadsheetApp.openById("1bN7PTOa6PwryVvcGxzDxuNVkeZMRwYKAGFnQvxJ_0nU");
var tasklist = spreadsheet.getSheets()[0].getDataRange();
var tasks = tasklist.getValues();
var tasksnum = tasklist.getNumRows();
Logger.log(tasks[7][2]); //Console returns "01.12.2014"
Logger.log(tasks[7][2].indexOf(month)); //Console returns "12.2014"
/* Filter tasks by month */
for (var i = 1; i < 9; i++) {
if (tasks[i][2].indexOf(month) >= 0) {
Logger.log(tasks[i]);
}
else {
return;
}
}
让我发疯的是:如上所述,for循环不起作用。但如果我像这样改变它
if (tasks[7][2].indexOf(month) >= o) {
它就像一个魅力。这就是我无法得到的。我应该增加到9,所以在某个时候应该是7。至少那时,条件应为true,循环应返回日志。
我错过了什么?
提前谢谢大家。
ps:如果我只是遵循如何实现该功能的错误路径,请告诉我。 ps2:我认为我的问题标题有点神秘。如果你有一个更好的想法,我很乐意改变它。
答案 0 :(得分:0)
我不确定month
变量中的内容应该是什么,但我建议构建一个字符串以匹配您的日期格式并进行字符串比较,而不是使用indexOf()策略#&#39} 39;重新尝试。此代码经过测试,并且确实如此:
function test() {
/* Initial data */
var spreadsheet = SpreadsheetApp.openById("");
var tasklist = spreadsheet.getSheets()[0].getDataRange();
var tasks = tasklist.getValues();
var tasksnum = tasklist.getNumRows();
/* Filter tasks by month */
var today = Utilities.formatDate(
new Date(),
spreadsheet.getSpreadsheetTimeZone(),
"dd.MM.yyyy"
);
for(var i=1; i<9; i++){
if (tasks[i][2] == today){
Logger.log(tasks[i]);
}
}
}
答案 1 :(得分:0)
原始代码不起作用的原因是由于else块中的return语句。返回立即退出函数,因此你的循环永远不会超过你的IF的第一个“错误”。
删除“return”(或完全保留else块),您的代码应该可以正常工作。