合并两个可正常运行的Google Sheets宏后无法生效该如何解决?
问题原因
合并后的宏失效是因为Google Apps Script执行时不会等待表格公式计算完成就会执行下一行代码:你刚给单元格写入=now()公式,脚本立刻就执行粘贴操作,此时公式还没算出时间值,粘贴自然没有效果。拆成两个宏运行时,两次宏执行的间隔足够公式完成计算,所以单独运行都正常。
最优解决方案
你要的是静态时间戳,完全不需要绕「写公式再转值」的逻辑,直接用JS原生时间对象写入静态值即可,代码更短执行也不会出问题:
function TimeStamp() { const currentCell = SpreadsheetApp.getActive().getCurrentCell(); currentCell.setValue(new Date()); // 如果需要自定义日期格式,可以加下面这行,格式规则和Sheets自定义格式一致 // currentCell.setNumberFormat("yyyy-MM-dd hh:mm:ss"); }
原有代码的修复方法
如果你要保留原来的实现逻辑,只需要在写入公式和复制粘贴之间加一行SpreadsheetApp.flush(),强制脚本等待之前的表格修改生效、公式计算完成后再执行后续操作:
function TimeStamp() { var spreadsheet = SpreadsheetApp.getActive(); spreadsheet.getCurrentCell().setFormulaR1C1('=now()'); // 新增下面这行即可 SpreadsheetApp.flush(); spreadsheet.getActiveRange().copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); };
内容的提问来源于stack exchange,提问作者BeckyW
相关产品推荐
相关产品推荐

