将日期对象传入Google Apps Script函数时返回值异常求助
Google Sheets自定义函数接收日期返回年中天数的问题
问题原因
这是因为Google Sheets自定义函数接收的参数是单元格当前显示的格式化后的值,而非单元格存储的原始日期数据。如果你的A1单元格格式被设置为"一年中的第几天"(格式代码为D),传递给Apps Script的就只是该日期在当年的天数,而非完整的日期对象或原始序列号。而DATEVALUE()函数会直接读取单元格存储的原始日期序列号,不受显示格式影响,所以能返回正确的30682(对应1984年1月1日的Sheets日期序列号)。
解决办法
方法1:修改单元格格式为标准日期格式
选中A1单元格,设置格式为标准日期样式(比如MMM dd, yyyy),此时自定义函数会接收到完整的Date对象,直接返回即可得到正确结果:
function xxx(d) { return d; // 此时d是Date对象,返回后Sheets会自动按格式显示 }
方法2:在函数中获取单元格原始值(保留显示格式)
如果需要保留单元格的显示格式,可通过单元格地址直接读取原始存储值:
function getOriginalDate(cellAddress) { const sheet = SpreadsheetApp.getActiveSheet(); const cell = sheet.getRange(cellAddress); return cell.getValue(); }
调用时使用=getOriginalDate("A1"),即可获取单元格存储的原始日期数据。
内容的提问来源于stack exchange,提问作者Mitch VanDuyn
相关产品推荐
相关产品推荐

