Google 스프레드 시트의 스프레드 시트에 row[0]
과 row[1]
인 두 개의 열이 있습니다. 내가 자동으로 내부 /
에 의해 .
를 교체하고 dd/mm/yyyy
로 포맷 된 날짜를 얻고 그럼에도 불구하고 스크립트의 두 번째 반복에서, 예를 들어,에 Fri Sep 02 2016 00:00:00 GMT+0300 (MSK)
이러한 dd/mm/yyyy
을 변환하지 않습니다 할 때 그 안에서 날짜는 dd.mm.yyyy
로 작성 예비 있습니다.점을 점 대신 슬래시로 바꾸는 형식의 문제
나는 이것을 Stackoverflow에서 찾았지만 많은 팁을 발견했지만 불행히도 원하는 결과를 얻지 못했습니다.
다음은 내가 발견 한 것과 내가 추가하려고 시도한 것입니다 : Replacing all dots in a string with backslashes in Java. 동일한 부작용이 관찰되었습니다. 여기
내 소스 코드 :function FormatCheckInAndCheckOutDates() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // Строка с первым бронированием для начала обработки
var numRows = sheet.getLastRow()-1; // Количество строк с бронированиями для обработки
var dataRange = sheet.getRange(startRow, 1, numRows, 3); // Охват столбцов для обработки ячеек, в данном случае с 1-го по 3-й.
var data = dataRange.getValues(); // Получить значение ячеек в каждой ячейке каждой строке в рамках столбцов, охваченных верхним кодом.
for (var i = 0; i < data.length; ++i) {
var row = data[i];
var checkInDate = row[0].toString().valueOf();
var checkOutDate = row[1].toString().valueOf();
var replaceDotsInCheckIn = checkInDate.replace(".", "/");
var replaceDotsInCheckOut = checkOutDate.replace(".", "/");
sheet.getRange(startRow + i, 1).setValue(replaceDotsInCheckIn);
sheet.getRange(startRow + i, 2).setValue(replaceDotsInCheckOut);
SpreadsheetApp.flush(); // Здесь завершается обновление ячеек 17-го столбца, в котором проставляется статус отправки уведомлений.
Logger.log("Произведена замена точек на слэши в датах заезда и выезда всех существующих бронирований.");
}
}
내가 02.09.2016
Fri Sep 02 2016 00:00:00 GMT+0300 (MSK)
에 변화 방지 할 수있는 방법 때 둘째/셋째/... 내 스크립트를 실행? 관련 조언에 대한 도움은 사전에 강력하게 평가됩니다.
UPD № 1. 지금 내 소스 코드의 업데이트입니다 않았다뿐만 아니라 하나 대답 위의 의견을 갖는
function FormatCheckInAndCheckOutDates() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // Строка с первым бронированием для начала обработки
var numRows = sheet.getLastRow()-1; // Количество строк с бронированиями для обработки
var dataRange = sheet.getRange(startRow, 1, numRows, 3); // Охват столбцов для обработки ячеек, в данном случае с 1-го по 3-й.
var data = dataRange.getValues(); // Получить значение ячеек в каждой ячейке каждой строке в рамках столбцов, охваченных верхним кодом.
for (var i = 0; i < data.length; ++i) {
var row = data[i];
/* var checkInDate = row[0].toString().valueOf();
var checkOutDate = row[1].toString().valueOf(); */
var checkInDate = new Date(row[0].replace(/\./g, '/'));
var checkOutDate = new Date(row[1].replace(/\./g, '/'));
var replaceDotsInCheckIn = (checkInDate.getMonth() + 1).toString() + '/' + checkInDate.getDate().toString() + '/' + checkInDate.getFullYear().toString();
var replaceDotsInCheckOut = (checkOutDate.getMonth() + 1).toString() + '/' + checkOutDate.getDate().toString() + '/' + checkOutDate.getFullYear().toString();
sheet.getRange(startRow + i, 1).setValue(replaceDotsInCheckIn);
sheet.getRange(startRow + i, 2).setValue(replaceDotsInCheckOut);
SpreadsheetApp.flush(); // Здесь завершается обновление ячеек 17-го столбца, в котором проставляется статус отправки уведомлений.
}
Logger.log("Произведена замена точек на слэши в датах заезда и выезда всех существующих бронирований.");
}
하지만 여전히 다음과 같은 오류 얻을 :
TypeError: Cannot find function replace in object Sun May 01 2016 00:00:00 GMT+0300 (MSK). (line 16, file ...
을 UPD № 2. 나는 소스를 아래에 놓았습니다. 나는 마침내 생각났습니다.
function FormatCheckInAndCheckOutDates() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetName = "2016"; // Здесь указывается название листа таблицы, в котором требуется производить форматирование дат заезда и выезда.
var sheet = ss.getSheetByName(sheetName);
var startRow = 2; // Строка с первым бронированием для начала обработки.
var numRows = sheet.getLastRow()-1; // Количество строк с бронированиями для обработки.
var dataRange = sheet.getRange(startRow, 1, numRows, 3); // Охват столбцов для обработки ячеек, в данном случае с 1-го по 3-й.
var data = dataRange.getValues(); // Получить значение ячеек в каждой ячейке каждой строке в рамках столбцов, охваченных верхним кодом.
for (var i = 0; i < data.length; ++i) {
var row = data[i];
var checkInDate = row[0];
var checkOutDate = row[1];
if (typeof checkInDate == "object") { // Здесь обрабатываем даты заезда.
var formattedCheckInDate = Utilities.formatDate(checkInDate, "GMT+0300", "dd/MM/yyyy");
} else {
var formattedCheckInDate = checkInDate.toString().valueOf().replace(/\./g, "/");
Logger.log("В дате заезда в строке № " + [i+2] + " разделяющие точки были заменены на слэши.");
}
if (typeof checkOutDate == "object") { // Здесь обрабатываем даты выезда.
var formattedCheckOutDate = Utilities.formatDate(checkOutDate, "GMT+0300", "dd/MM/yyyy");
} else {
var formattedCheckOutDate = checkOutDate.toString().valueOf().replace(/\./g, "/");
Logger.log("В дате выезда в строке № " + [i+2] + " разделяющие точки были заменены на слэши.");
}
sheet.getRange(startRow + i, 1).setValue(formattedCheckInDate); // Обновляем столбец значениями обработанных дат заезда.
sheet.getRange(startRow + i, 2).setValue(formattedCheckOutDate); // Обновляем столбец значениями обработанных дат выезда.
SpreadsheetApp.flush();
}
}
이 문제를 해결해 주신 모든 분들께 감사드립니다.
날짜가 문자열로 변환되는 방법에 대해 혼동스러워 보입니다. 당신은 약간의 조사를하고 싶을지도 모른다. '.'에서'/'로의 변환은 작동하지만 "toString"함수는 여러분에게 슬픔의 원인입니다. – deltree
@deltree, ok,하지만 어떻게'.' 기존의 날짜를 문자열로 변환하지 않고 대체 할 수 있습니까? 내 수색이별로 성공하지 못했기 때문에 내 사건을 설명하는 몇 가지 링크를 제공 해주시면 감사하겠습니다. – RLearnsR