Google Apps Script开发需求:按今日起3天内日期过滤表格
用Google Apps Script筛选表格中今日至未来3天的对象
下面是针对你的需求编写的完整脚本,附带详细说明,适合新手使用:
完整脚本
function filterUpcomingObjects() { // 获取当前打开的表格文件 const ss = SpreadsheetApp.getActiveSpreadsheet(); // 读取存储原始数据的sheet(请替换成你实际的sheet名称) const sourceSheet = ss.getSheetByName("数据源"); // 准备存储筛选结果的sheet,不存在则自动创建 let resultSheet = ss.getSheetByName("近期内容"); if (!resultSheet) { resultSheet = ss.insertSheet("近期内容"); } // 获取所有数据,跳过第一行表头 const allData = sourceSheet.getDataRange().getValues().slice(1); // 初始化今日日期,清零时分秒避免时间干扰 const today = new Date(); today.setHours(0, 0, 0, 0); // 计算未来3天的截止日期 const threeDaysLater = new Date(today); threeDaysLater.setDate(today.getDate() + 3); // 筛选符合日期范围的行 const filteredRows = allData.filter(row => { // 将表格中的DD/MM/YYYY格式日期转为标准Date对象 const [day, month, year] = row[0].split("/"); const rowDate = new Date(year, month - 1, day); rowDate.setHours(0, 0, 0, 0); // 判断日期是否在今日到未来3天区间内(包含两端) return rowDate >= today && rowDate <= threeDaysLater; }); // 清空结果sheet旧内容,写入新数据 resultSheet.clearContents(); resultSheet.appendRow(["Dates", "Objects"]); // 写入表头 if (filteredRows.length > 0) { resultSheet.getRange(2, 1, filteredRows.length, filteredRows[0].length).setValues(filteredRows); } else { resultSheet.appendRow(["无符合条件的内容"]); } // 弹出提示告知完成状态 SpreadsheetApp.getUi().alert("筛选完成,结果已保存到「近期内容」sheet"); }
使用说明
- 修改sheet名称:如果你的原始数据不在名为「数据源」的sheet中,把
getSheetByName("数据源")里的字符串替换成实际的sheet名称。 - 日期格式适配:脚本默认适配你表格中的
DD/MM/YYYY日期格式,如果格式不同,需要调整split("/")后的拆分数组顺序。 - 运行脚本:
- 打开你的Google表格,点击顶部菜单「扩展程序」→「Apps脚本」
- 将上述代码粘贴到脚本编辑器中,点击「保存」,命名项目(比如"近期内容筛选")
- 点击运行按钮,首次运行需要授权,按照提示完成权限验证即可。
可选功能:原表高亮符合条件的行
如果想直接在原表中高亮近期内容,可在脚本中添加以下代码(放在filteredRows定义之后):
// 清除原表所有高亮背景 sourceSheet.getDataRange().setBackground(null); // 遍历数据,给符合条件的行设置黄色背景 allData.forEach((row, index) => { const [day, month, year] = row[0].split("/"); const rowDate = new Date(year, month - 1, day); rowDate.setHours(0, 0, 0, 0); if (rowDate >= today && rowDate <= threeDaysLater) { // 行号为index+2(因为跳过了表头,index从0开始) sourceSheet.getRange(index + 2, 1, 1, sourceSheet.getLastColumn()).setBackground("#ffffcc"); } });
内容的提问来源于stack exchange,提问作者Riccardo Veronese
相关产品推荐
相关产品推荐

