如何在Google Sheets中删除纯文本日期列超过30天的对应行
解决方案
你不需要修改E列的纯文本格式,只需要在代码中新增一步,把E列读取到的带序数后缀(th/rd/st/nd)的日期字符串预处理成可被Date()对象识别的格式即可,修改后的代码如下:
function deleteOldRows() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName("sheet1"); var datarange = sheet.getDataRange(); var lastrow = datarange.getLastRow(); var values = datarange.getValues(); // 计算30天前的日期 var monthOld = new Date() monthOld = new Date(monthOld.getTime() - 30 * 3600000 * 24) for (i = lastrow; i >= 2; i--) { var dateStr = values[i-1][4]; // 去掉日期中的序数后缀,仅处理内存中的字符串,不修改表格原始内容 var cleanedDateStr = dateStr.replace(/(\d+)(st|nd|rd|th)/, '$1'); var tempDate = new Date(cleanedDateStr); // 新增日期有效性判断,避免空值/格式错误的行被误删 if (!isNaN(tempDate.getTime()) && tempDate <= monthOld) { sheet.deleteRow(i); Logger.log(`Row ${i} was deleted`); } } }
关键逻辑说明
- 正则替换仅修改代码读取到内存的字符串内容,不会写入回表格,不会改变E列的纯文本格式,完全不影响你其他生成JSON的脚本正常运行
- 新增的有效性校验可以避免E列空行、格式异常行触发错误操作
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

