我想在單元格 A5:A35 中列出上個月的日期。
我目前只是使用公式,但它會列出所有的日子,而不管這個月的計數如何。因此,當我制作 11 月的表格時,串列中將包含 12 月 1 日。我不想要那個。
我嘗試撰寫腳本來獲取當前月份并搜索該月份的范圍,但它不起作用并且看起來很復雜。必須有更清潔的方法。
我只想以編程方式列出上個月的天數。
我有這個
代碼功能在手機上不起作用
function assignDates() {
const cell = sheet.getRange('A5:A35');
cell.setFormula(=EOMONTH(TODAY(),-2) D5
d5 是一個帶有 1,2,3... 等的隱藏列。這是一種非常便宜的方法。
無論一個月的長度如何,它都會列出 31 天。
現在為了解決這個問題,我嘗試制作一個腳本來獲取當前月份,然后洗掉包含該月份的條目,但它不起作用。
//check to see if dates fall within month
function dateCheck(sheet){
var sheet = SpreadsheetApp.getActive().getSheetByName('test');
//get current month
var month = Utilities.formatDate(new Date(), "GMT-5", "MMMM")
// Delete days that fall out of range
var dayRange = sheet.getRange('A5:A36').getDisplayValues();
dayRange.forEach((date) => { if (date.toString().includes(month))
{ sheet.getRangeList(dayRange).clearContent() } })
}
uj5u.com熱心網友回復:
=SEQUENCE(DAYS(EOMONTH(TODAY(),) 1,EOMONTH(TODAY(),-1) 1),1,EOMONTH(TODAY(),-1) 1)
DAYS計算本月的天數EOMONTH獲取上個月和本月的結束日期SEQUENCE創建日期序列。
TODAY()如果您不想每個月都更改序列,則需要更改為靜態日期字串。
uj5u.com熱心網友回復:
在電子表格上獲取上個月和本月日歷
代碼:
function getCalendar() {
const ss = SpreadsheetApp.getActive()
const sh = ss.getActiveSheet();
sh.clear();
let oA = [];
oA.push(monthlyCalendar(new Date().getMonth() - 1, null, true));//helper function
oA.push(monthlyCalendar(new Date().getMonth(), null, true));//helper function
//oA.push(monthlyCalendar(new Date().getMonth() 1, null, true));
oA.forEach((obj, i) => {
if (i == 0) {
sh.getRange(1, 1, 2, obj.cA[0].length).setFontWeight('bold');
sh.getRange(1, 1, obj.cA.length, obj.cA[0].length).setValues(obj.cA);
} else {
let sr = sh.getLastRow() 2;
sh.getRange(sr, 1, 2, obj.cA[0].length).setFontWeight('bold');
sh.getRange(sr, 1, obj.cA.length, obj.cA[0].length).setValues(obj.cA);
if (obj.roff && obj.coff) {
sh.getRange(sr, 1).offset(obj.roff, obj.coff).setFontWeight('bold').setFontColor('red');//sets the current date to bold and red
}
}
});
}
輔助功能:
function monthlyCalendar(m, wsd, ret) {
var m = m || new Date().getMonth();
var wsd = wsd || 1;//defaults to Monday
var ret = ret || false;
const td = new Date();
const [cy,cm,cd] = [td.getFullYear(),td.getMonth(),td.getDate()];
const dA = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
const oA = [...Array.from(Array(7).keys(), idx => dA[(idx wsd) % 7])]
let dObj = {};
let midx = {};
let rObj = {cA:null,roff:null,coff:null};
oA.forEach(function (e, i) { dObj[e] = i; });
const mA = [...Array.from(new Array(12).keys(), x => Utilities.formatDate(new Date(2021, x, 15), Session.getScriptTimeZone(), "MMM"))];
mA.forEach((e, i) => { midx[i] = i; })
let cA = [];
let bA = [];
let wA = [null, null, null, null, null, null, null];
const ss = SpreadsheetApp.getActive();
const sh = ss.getActiveSheet();
sh.clear();
const year = new Date().getFullYear();
let i = midx[m % 12];
let month = new Date(year, i, 1).getMonth();
let dates = new Date(year, i 1, 0).getDate();
cA.push([mA[month], dates, '', '', '', '', '']);
bA.push(['#ffffff', '#ffffff', '#ffffff', '#ffffff', '#ffffff', '#ffffff', '#ffffff']);
cA.push(oA)
//bA.push(['#ffff00', '#ffff00', '#ffff00', '#ffff00', '#ffff00', '#ffff00', '#ffff00']);
let d = [];
let ddd = [];
for (let j = 0; j < dates; j ) {
let day = new Date(year, i, j 1).getDay();
let date = new Date(year, i, j 1).getDate();
if (day < wA.length) {
wA[dObj[dA[day]]] = date;
}
if(cy == year && cm == month && cd == date) {
rObj.roff = cA.length;
rObj.coff = dObj[dA[day]];
}
if (dA[day] == oA[wA.length - 1] || date == dates) {
cA.push(wA);
//bA.push(['#ffffff', '#ffffff', '#ffffff', '#ffffff', '#ffffff', '#ffffff', '#ffffff']);
wA = ['', '', '', '', '', '', ''];
}
}
if (!ret) {
rObj.cA = cA;
sh.getRange(1, 1, rObj.cA.length, rObj.cA[0].length).setValues(cA);
if (rObj.roff && rObj.coff) {
sh.getRange(1, 1).offset(rObj.roff, rObj.coff).setFontWeight('bold').setFontColor('red');
}
} else {
rObj.cA = cA;
return rObj;
}
}
演示:

uj5u.com熱心網友回復:
如果您需要這里的腳本,請執行以下操作:
function myFunction() {
var today = new Date();
var year = today.getFullYear();
var month = today.getMonth(); // 0 -> January, 1 -> February, etc...
// get the number of days of the previous month
// 'zero day' of a month is the last day of a previous month
var len = new Date(year, month, 0).getDate();
// make an array with dates (strings, actually)
var options = { year: 'numeric', month: 'numeric', day: 'numeric' };
var dates = new Array(len).fill('').map((_, day) =>
[new Date(year, month-1, day 1).toLocaleString('en-US', options)])
// put the array on the sheet
SpreadsheetApp.getActiveSheet().getRange(5,1,len,1).setValues(dates);
}
日期總是一件棘手的事情。
uj5u.com熱心網友回復:
不錯的挑戰!
在 A5 上輸入以下函式:
=arrayformula(if(eomonth(today(),-2) row(A5:A35) 1-row()>eomonth(today(),-1),"",eomonth(today(),-2) row(A5:A35) 1-row()))
它將檢索從 1 號到上個月最后一天的所有日期(與 相關today())。直到 31 日、30 日、28 日或 29 日動態!

干杯!
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/369222.html
