我们有一个预测表,需要 Apps 脚本来更新 D1:N1 中的单元格。
我可以按今天的方式进行更新,但只有当单元格 D1 中的月份是十月时,它才会更新。当十一月很快寒冷时,这将没有帮助:)
我可以以某种方式引用数组吗?或者如何解决这个问题?我也可以继续这样做,但代码确实会长,至少可以说,看起来不太好看。
function myFunction() {
var date = new Date();
var mt = date.getMonth();
var currentD
if (mt === 0) {
currentD = "JAN (qty)";
}if (mt === 1) {
currentD = "FEB (qty)";
}if (mt === 2) {
currentD = "MAR (qty)";
}if (mt === 3) {
currentD = "APR (qty)";
}if (mt === 4) {
currentD = "MAJ (qty)";
}if (mt === 5) {
currentD = "JUNI (qty)";
}if (mt === 6) {
currentD = "JULY (qty)";
}if (mt === 7) {
currentD = "AUG (qty)";
}if (mt === 8) {
currentD = "SEP (qty)";
}if (mt === 9) {
currentD = "OKT (qty)";
}if (mt === 10){
currentD = "NOV (qty)";
}else if (mt === 11){
currentD = "DEC (qty)";
}
Logger.log("CurrentD: " +currentD);
var spr = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spr.getSheets()[0];
//D_MONTH
var range = sheet.getRange("D1");
var cell = range.getCell(1, 1);
var D_MONTH = cell.getValue();
Logger.log("D_MONTH: " + D_MONTH);
if(D_MONTH != currentD) {
cell.setValue(currentD);
}
//E_MONTH
var range = sheet.getRange("E1");
var cell = range.getCell(1, 1);
var E_MONTH = cell.getValue();
if(currentD === "OKT (qty)") {
cell.setValue("NOV (qty)");
}
//F_MONTH
var range = sheet.getRange("F1");
var cell = range.getCell(1, 1);
var F_MONTH = cell.getValue();
if(currentD === "OKT (qty)") {
cell.setValue("DEC (qty)");
}
//G_MONTH
var range = sheet.getRange("G1");
var cell = range.getCell(1, 1);
var G_MONTH = cell.getValue();
if(currentD === "OKT (qty)") {
cell.setValue("JAN (qty)");
}
//H_MONTH
var range = sheet.getRange("H1");
var cell = range.getCell(1, 1);
var H_MONTH = cell.getValue();
if(currentD === "OKT (qty)") {
cell.setValue("FEB (qty)");
}
//I_MONTH
var range = sheet.getRange("I1");
var cell = range.getCell(1, 1);
var I_MONTH = cell.getValue();
if(currentD === "OKT (qty)") {
cell.setValue("MAR (qty)");
}
//J_MONTH
var range = sheet.getRange("J1");
var cell = range.getCell(1, 1);
var J_MONTH = cell.getValue();
if(currentD === "OKT (qty)") {
cell.setValue("APR (qty)");
}
//K_MONTH
var range = sheet.getRange("K1");
var cell = range.getCell(1, 1);
var K_MONTH = cell.getValue();
if(currentD === "OKT (qty)") {
cell.setValue("MAJ (qty)");
}
//L_MONTH
var range = sheet.getRange("L1");
var cell = range.getCell(1, 1);
var L_MONTH = cell.getValue();
if(currentD === "OKT (qty)") {
cell.setValue("JUNI (qty)");
}
//M_MONTH
var range = sheet.getRange("M1");
var cell = range.getCell(1, 1);
var M_MONTH = cell.getValue();
if(currentD === "OKT (qty)") {
cell.setValue("JULY (qty)");
}
//N_MONTH
var range = sheet.getRange("N1");
var cell = range.getCell(1, 1);
var N_MONTH = cell.getValue();
if(currentD === "OKT (qty)") {
cell.setValue("AUG (qty)");
}
}
最佳答案
不要重复自己 - 如果您的代码开始看起来像一种模式,那么您很有可能将其重构为更简洁的内容。
这应该可以满足您的需要。它检查第一列,如果是当前月份则返回。如果不是,它会开始用当前月份名称覆盖,并将右侧的以下月份名称覆盖到下一年。
function setDates(){
var monthNames = ["Jan", "Feb", "Mar",
"Apr", "May", "Jun",
"Jul", "Aug", "Sep",
"Oct", "Nov", "Dec"];
var currentMonths = SpreadsheetApp.getActiveSpreadsheet().getRange("D1:N1").getValues()[0];
var currentMonth = new Date().getMonth();
if (currentMonths[0] == monthNames[currentMonth]){return;}
for (var col = 0; col < currentMonths.length; col++){
SpreadsheetApp.getActiveSpreadsheet()
.getActiveSheet()
.getRange(1,4+col)
.setValue(monthNames[(currentMonth + col > 11 ?
currentMonth + col - 12 :
currentMonth + col)]);
}
}
关于javascript - Google 电子表格中月份的滚动方案(从当前日期自动更新),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33363182/