修复脚本以输入 2021-02-01 而不是 2021-02-32
Fixing script to input 2021-02-01 instead of 2021-02-32
我正在尝试在 Google 表格的脚本编辑器中使用此代码插入今天的日期以及一段一致的文本,并且在 2021 年 1 月 31 日之前一直运行良好,当时它开始插入 2021-02-32、2021-02-33 等,而不是 2021-02-01、2021-02-02 等。这是我的代码 运行:
function daily() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getSheetByName("Social Tracker");
var date = Utilities.formatDate(new Date(), "GMT", "YYYY-MM-DD");
var aValues = sh.getRange("A1:A").getValues();
var aLast = aValues.filter(String).length;
// Assuming A and B have same last row, no need for B
// If different, need to calculate separately
var bValues = sh.getRange("B1:B").getValues();
var bLast = bValues.filter(String).length;
// If A and B are the same, use setValues
sh.getRange(aLast + 1, 1, 1, 2).setValues([[date,'handle']]);
var sheet = SpreadsheetApp.getActiveSheet();
var followers = sheet.getRange(2,5,sheet.getLastRow()).getValues();
var nextRowJ = getFirstEmptyRow('J');
var following = sheet.getRange(2,6,sheet.getLastRow()).getValues();
var nextRowK = getFirstEmptyRow('K');
var engagement = sheet.getRange(2,7,sheet.getLastRow()).getValues();
var nextRowL = getFirstEmptyRow('L');
var likes = sheet.getRange(2,8,sheet.getLastRow()).getValues();
var nextRowM = getFirstEmptyRow('M');
var comments = sheet.getRange(2,9,sheet.getLastRow()).getValues();
var nextRowN = getFirstEmptyRow('N');
var posts = sheet.getRange(2,4,sheet.getLastRow()).getValues();
var nextRowO = getFirstEmptyRow('O');
// Record current balance and timestamp at end of columns B & C
sheet.getRange(nextRowO, 15, 1, 1).setValues([[posts]]);
sheet.getRange(nextRowJ, 10, 1, 1).setValues([[followers]]);
sheet.getRange(nextRowK, 11, 1, 1).setValues([[following]]);
sheet.getRange(nextRowL, 12, 1, 1).setValues([[engagement]]);
sheet.getRange(nextRowM, 13, 1, 1).setValues([[likes]]);
sheet.getRange(nextRowN, 14, 1, 1).setValues([[comments]]);
}
// From
function getFirstEmptyRow(columnLetter) {
columnLetter = columnLetter || 'A';
var rangeA1 = columnLetter + ':' + columnLetter;
var spr = SpreadsheetApp.getActiveSpreadsheet();
var column = spr.getRange(rangeA1);
var values = column.getValues(); // get all data in one call
var ct = 0;
while ( values[ct][0] != "" ) {
ct++;
}
这是 cells that are being filled in by the script 的图像。我假设我的问题出在这条线上:
sh.getRange(aLast + 1, 1, 1, 2).setValues([[日期,'consistent piece of text']]);
我如何调整它以确保它遵循 A1 中的下一个日期,即。插入 2021-02-01 而不是 2021-02-32?
使用:
var date = Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd");
原因:
Utilities.formatDate(date, timeZone, format) follows this format guidelines
当您使用 "DD"
时,您指定了一年中的第几天。如果你想指定你需要使用 dd
此外,当您使用 "YYYY"
时,您指的是一周年。如果您想获得实际年份,请改用 "yyyy"
。
如果您发现使用 Java SE Simple Date Format counterintuitive and you are using Google Apps Script V8 runtime instead of using Utilities.formatdate()
you might use to Date.prototype.toLocaleDateString
而不是 "YYYY-MM-DD"
使用 "yyyy-MM-dd"
YYYY
代表 4 位数的弱年份(一年中的 first/last 周可能 return 与您期望的数字不同。
yyyy
代表4位数年份
DD
代表年日(32是2月1日)
MM
代表2位数的月份(02是二月)
mm
2 位数分钟的统计数据
我正在尝试在 Google 表格的脚本编辑器中使用此代码插入今天的日期以及一段一致的文本,并且在 2021 年 1 月 31 日之前一直运行良好,当时它开始插入 2021-02-32、2021-02-33 等,而不是 2021-02-01、2021-02-02 等。这是我的代码 运行:
function daily() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getSheetByName("Social Tracker");
var date = Utilities.formatDate(new Date(), "GMT", "YYYY-MM-DD");
var aValues = sh.getRange("A1:A").getValues();
var aLast = aValues.filter(String).length;
// Assuming A and B have same last row, no need for B
// If different, need to calculate separately
var bValues = sh.getRange("B1:B").getValues();
var bLast = bValues.filter(String).length;
// If A and B are the same, use setValues
sh.getRange(aLast + 1, 1, 1, 2).setValues([[date,'handle']]);
var sheet = SpreadsheetApp.getActiveSheet();
var followers = sheet.getRange(2,5,sheet.getLastRow()).getValues();
var nextRowJ = getFirstEmptyRow('J');
var following = sheet.getRange(2,6,sheet.getLastRow()).getValues();
var nextRowK = getFirstEmptyRow('K');
var engagement = sheet.getRange(2,7,sheet.getLastRow()).getValues();
var nextRowL = getFirstEmptyRow('L');
var likes = sheet.getRange(2,8,sheet.getLastRow()).getValues();
var nextRowM = getFirstEmptyRow('M');
var comments = sheet.getRange(2,9,sheet.getLastRow()).getValues();
var nextRowN = getFirstEmptyRow('N');
var posts = sheet.getRange(2,4,sheet.getLastRow()).getValues();
var nextRowO = getFirstEmptyRow('O');
// Record current balance and timestamp at end of columns B & C
sheet.getRange(nextRowO, 15, 1, 1).setValues([[posts]]);
sheet.getRange(nextRowJ, 10, 1, 1).setValues([[followers]]);
sheet.getRange(nextRowK, 11, 1, 1).setValues([[following]]);
sheet.getRange(nextRowL, 12, 1, 1).setValues([[engagement]]);
sheet.getRange(nextRowM, 13, 1, 1).setValues([[likes]]);
sheet.getRange(nextRowN, 14, 1, 1).setValues([[comments]]);
}
// From
function getFirstEmptyRow(columnLetter) {
columnLetter = columnLetter || 'A';
var rangeA1 = columnLetter + ':' + columnLetter;
var spr = SpreadsheetApp.getActiveSpreadsheet();
var column = spr.getRange(rangeA1);
var values = column.getValues(); // get all data in one call
var ct = 0;
while ( values[ct][0] != "" ) {
ct++;
}
这是 cells that are being filled in by the script 的图像。我假设我的问题出在这条线上: sh.getRange(aLast + 1, 1, 1, 2).setValues([[日期,'consistent piece of text']]);
我如何调整它以确保它遵循 A1 中的下一个日期,即。插入 2021-02-01 而不是 2021-02-32?
使用:
var date = Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd");
原因:
Utilities.formatDate(date, timeZone, format) follows this format guidelines
当您使用 "DD"
时,您指定了一年中的第几天。如果你想指定你需要使用 dd
此外,当您使用 "YYYY"
时,您指的是一周年。如果您想获得实际年份,请改用 "yyyy"
。
如果您发现使用 Java SE Simple Date Format counterintuitive and you are using Google Apps Script V8 runtime instead of using Utilities.formatdate()
you might use to Date.prototype.toLocaleDateString
而不是 "YYYY-MM-DD"
使用 "yyyy-MM-dd"
YYYY
代表 4 位数的弱年份(一年中的 first/last 周可能 return 与您期望的数字不同。yyyy
代表4位数年份DD
代表年日(32是2月1日)MM
代表2位数的月份(02是二月)mm
2 位数分钟的统计数据