如何修改Google Sheets脚本实现无需借助=NOW()单元格获取当前日期时间
Google Apps Script 直接获取当前时间替代
=NOW()单元格方案 可以直接实现,无需依赖单元格内的=NOW()公式,核心通过JavaScript原生Date对象结合Apps Script自带的工具方法获取匹配表格时区的当前时间即可。
修正后完整代码
function Carregar_Apuracao_parcial_CRC() { var spreadsheet = SpreadsheetApp.getActive(); var sheet_lancamento = spreadsheet.getSheetByName('CRC'); var sheet_bdl = spreadsheet.getSheetByName('Respostas Parcial'); var ultimalinhabdl = sheet_bdl.getLastRow(); // 获取表格时区,匹配原=NOW()的时区逻辑 var spreadsheetTz = spreadsheet.getSpreadsheetTimeZone(); // 写入B4的值 sheet_bdl.getRange(ultimalinhabdl + 1, 1).setValue(sheet_lancamento.getRange('B4').getValue()); // 直接生成当前时间写入第二列,替换原来读O2单元格的逻辑 // 格式字符串可根据需要的展示效果调整,当前和你原代码截断的格式参数一致 var currentDatetime = Utilities.formatDate(new Date(), spreadsheetTz, "EEE, d MMM yyyy HH:mm"); // 若需要写入日期对象而非字符串,直接改成new Date()即可,配合单元格日期格式使用 sheet_bdl.getRange(ultimalinhabdl + 1, 2).setValue(currentDatetime); // 写入S5的值 sheet_bdl.getRange(ultimalinhabdl + 1, 3).setValue(sheet_lancamento.getRange('S5').getValue()); sheet_lancamento.getRange('T2').activate(); const sheet_draw = SpreadsheetApp.getActiveSheet(); }
核心修改说明
- 移除了原代码中冗余的
setActiveSheet调用,直接通过工作表对象操作数据,执行效率更高 - 修复了原代码中时间格式化部分的语法截断错误
- 用
new Date()获取当前时间,通过Utilities.formatDate()匹配表格时区和自定义格式,和原=NOW()的输出效果完全一致 - 替换了原
copyTo粘贴值的逻辑,直接用setValue写入,无需切换激活单元格,逻辑更简洁
内容的提问来源于stack exchange,提问作者MATHEUS FELIPE BERNARDES
相关产品推荐
相关产品推荐

