問題:
我有 4 列:A、B、C 和 D。A 列每天都使用格式day/month/year 的日期填充。現在我想確保任何日期都寫在 A 列中,這些日期被復制到 B、C 和 D 列并在那里增加 1 天。
示例:
假設用戶剛剛以日/月/年的格式在 A 列的 3 個不同行中寫入了日期 18/10/2021、19/10/2021 和 20/10/2021。這些日期應該在接下來的每一列中復制并增加 1 天,以便我可以得到以下結果:
B 欄:19/10/2021、20/10/2021 和 21/10/2021
C
欄:20/10 /2021、21/10/2021 和 22/10/2021 D 欄:21/10/2021、22 /10/2021 和 23/10/2021
問題:
下面的腳本只能從 A 列復制 1 個日期,并在 B 列中將其增加 1 天。但是我如何確保它在 B、C 和 D 列中執行相同的操作而不只是 1 行?
// Get date from column A, increment it by 1 day and write this incremented date in colum B
function incrementDateInGermanFormat() {
var ss = SpreadsheetApp.getActiveSheet();
var date = new Date(ss.getRange(1, 1).getValue());
var newDate = new Date(date.setDate(date.getDate() 1));
var newFormattedDate = Utilities.formatDate(newDate, Session.getScriptTimeZone(), "dd/MM/yyyy");
ss.getRange(1, 2).setValue(newFormattedDate)
}
非常感謝您的幫助!!!
uj5u.com熱心網友回復:
這可以通過普通的電子表格公式來完成。把它放在單元格中B1:
=arrayformula(
if(
isnumber(A1:A),
{ A1:A 1, A1:A 2, A1:A 3 },
iferror(1/0)
)
)
將結果列格式化B:D為Format > Number > Date。
如果您出于問題中未提及的某些原因需要在 Apps Script 中執行此操作,請使用以下內容:
function incrementDates() {
const datesRange = SpreadsheetApp.getActiveSheet().getRange('A1:A');
const dates = datesRange.getValues().flat();
const result = dates.map(date => {
if (!date || !date.getDate) {
return [null, null, null];
}
const dayNumber = date.getDate();
return [
new Date(date.setDate(dayNumber 1)),
new Date(date.setDate(dayNumber 2)),
new Date(date.setDate(dayNumber 3)),
];
});
datesRange.offset(0, 1, result.length, result[0].length)
.setValues(result);
}
電子表格中使用的日期格式在此不起作用。有關日期和時間值如何在電子表格中作業的說明,請參閱此答案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/327403.html
