ご清聴ありがとうございました。
同じ Google Scripts プロジェクト内の 2 つの別々の関数に含まれる同一のコードがあります。このコードは、特定の日付を照合し、インデックスを使用してスプレッドシートから値を取得するための単なる基本的なループです。問題の特定の行は次のとおりです。
var pmsDate = new Date(data[j][dateColIndex]).setHours(0, 0, 0, 0);
コードは 1 つの関数で正常に動作します。ただし、他の関数では NaN を返します。ある関数から別の関数に文字通りループ構造をコピーして貼り付けたので、なぜ機能しないのかわかりません。考えられるすべての操作を試しましたが、問題を修正するものは何もないようです。
編集: 関数 1 は機能しません。機能 2 が機能します。
誰でも間違いを指摘したり、ガイダンスを提供したりできますか? Chrome を使用していますが、FF でも同じ問題が発生します。
編集2:これについて考えてくれてありがとう。リクエストに応じて、これらの関数のコードを投稿しました (あまり長くないので、すべてを投稿しました)。ここで参照されている「データ」シートは、日付と対応するデータを含む単なるスプレッドシートです。繰り返しますが、私が抱えている問題は、var pmsDate が関数 2 で DateString を正しく返しますが、まったく同じデータ配列を使用しているにもかかわらず、関数 1 で NaN を返すことです。どんな助けにも感謝します!
機能 1:
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;
}
機能 2
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;
}