如何在Google Sheets日历中筛选指定人员的所有日程时间?
Google Sheets提取特定人员日程的实现方法
方法一:使用内置公式(无需编程)
假设你的表格结构为:
- A列:日期(格式如「2月14日」)
- B列及以后:各时段表头(如「11:00」「12:00」),单元格内容为对应时段的人员姓名
直接在空白单元格输入以下公式,即可自动生成符合要求的格式:
=BYROW(UNIQUE(FILTER(A:A, B:Z="Peter")), LAMBDA(date, TEXTJOIN(" ", TRUE, "Peter", date, TEXTJOIN(" ", TRUE, FILTER(B1:Z1, INDEX(B:Z, MATCH(date, A:A, 0), 0)="Peter")))))
公式逻辑说明:
- 筛选出所有Peter有安排的日期并去重
- 对每个日期,定位到对应行的时段数据
- 提取该日期下Peter对应的所有时段表头
- 自动拼接成「姓名 日期 时段1 时段2...」的格式
方法二:使用Google Apps Script(批量处理更灵活)
如果需要更复杂的批量处理逻辑,可通过脚本实现:
- 打开目标表格,点击「扩展程序」→「Apps Script」
- 替换默认代码为以下内容:
function extractPeterSchedule() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const data = sheet.getDataRange().getValues(); const headers = data[0].slice(1); // 时段表头从B列开始 const result = []; for (let i = 1; i < data.length; i++) { const date = data[i][0]; const scheduleRow = data[i].slice(1); const peterSlots = []; scheduleRow.forEach((name, idx) => { if (name === "Peter") peterSlots.push(headers[idx]); }); if (peterSlots.length) { result.push(["Peter", date, ...peterSlots].join(" ")); } } // 创建或获取结果工作表 const outputSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("提取结果") || SpreadsheetApp.getActiveSpreadsheet().insertSheet("提取结果"); outputSheet.clear(); outputSheet.getRange(1, 1, result.length, 1).setValues(result.map(item => [item])); }
- 保存脚本并运行(首次运行需完成权限授权)
- 表格会自动生成名为「提取结果」的工作表,里面就是整理好的日程内容
内容的提问来源于stack exchange,提问作者Zé Miguel
相关产品推荐
相关产品推荐

