感谢大家对此的关注。
我有一段相同的代码包含在同一个 Google Scripts 项目中的两个单独的函数中。该代码只是一个基本循环,用于匹配给定日期,然后使用索引从电子表格中获取值。有问题的具体行是:
var pmsDate = new Date(data[j][dateColIndex]).setHours(0, 0, 0, 0);
该代码在一个功能中运行良好;然而,在另一个函数中,它返回 NaN。我从字面上将循环结构从一个函数复制并粘贴到另一个函数,所以我不明白为什么它不起作用。我已经尝试了我能想到的所有可能的操作,但似乎没有任何东西可以纠正这个问题。
编辑:功能 1 不起作用。功能 2 有效。
任何人都可以指出任何错误或提供一些指导吗?我正在使用 Chrome,同样的问题也出现在 FF 中。
编辑2:感谢您对此提出一些想法。根据要求,我已经发布了这些功能的代码(它们不是很长,所以我发布了整个内容)。此处引用的“数据”表只是一个带有日期和一些相应数据的电子表格。同样,我遇到的问题是 var pmsDate 在函数 2 中正确返回了 DateString,但在函数 1 中返回了 NaN,尽管使用了完全相同的数据数组。感谢任何帮助!
功能一:
function getMonthlyRooms(month) {
var forecastMonth = getMonthDigit(month);
var monthDays = daysInMonth(month);
var year = getYear();
var startDate = new Date(year, forecastMonth, 1, 0, 0, 0, 0);
var sheetData = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data");
var sheetDataCols = sheetData.getDataRange().getNumColumns();
var sheetDataRows = sheetData.getDataRange().getNumRows();
// find column header indexes
var dataHeaders = sheetData.getRange(1, 1, 1, sheetDataCols).getValues();
for (i = 0; i < sheetDataCols; i++) {
if (dataHeaders[0][i] == "CONSIDERED_DATE") {
var dateColIndex = i;
}
if (dataHeaders[0][i] == "NO_ROOMS") {
var roomsColIndex = i;
}
}
// find what row the month begins
var data = sheetData.getDataRange().getValues();
for (j = 0; j < sheetDataRows; j++) {
var pmsDate = new Date(data[j][dateColIndex]).setHours(0, 0, 0, 0);
if (pmsDate == startDate) {
var startRow = j + 1;
}
}
// loop through range and sum
var monthData = sheetData.getRange(startRow, (roomsColIndex + 1), monthDays, 1).getValues();
var occRooms = 0;
for (var k in monthData) {
occRooms += monthData[k][0];
}
return occRooms;
}
功能二
function getDailyRooms(date) {
var forecastDate = new Date(date).setHours(0, 0, 0, 0);
var sheetData = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data");
var sheetDataCols = sheetData.getDataRange().getNumColumns();
var sheetDataRows = sheetData.getDataRange().getNumRows();
// find column header indexes
var dataHeaders = sheetData.getRange(1, 1, 1, sheetDataCols).getValues();
for (i = 0; i < sheetDataCols; i++) {
if (dataHeaders[0][i] == "CONSIDERED_DATE") {
var dateColIndex = i;
}
if (dataHeaders[0][i] == "NO_ROOMS") {
var roomsColIndex = i;
}
}
// loop through data
var data = sheetData.getDataRange().getValues();
for (j = 0; j < sheetDataRows; j++) {
var pmsDate = new Date(data[j][dateColIndex]).setHours(0, 0, 0, 0);
if (pmsDate == forecastDate) {
var occRooms = sheetData.getRange(j + 1, roomsColIndex + 1).getValue();
}
}
return occRooms;
}