如何用Google Apps Script查找首行匹配日期并复制整行仅粘贴数值
功能实现Google Apps Script代码
function copyTodayColumnValuesOnly() { // 获取当前活跃的表格和工作表 const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getActiveSheet(); // 获取第一行所有数据 const firstRow = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]; // 获取今天的日期,清零时分秒避免时间戳差异导致匹配失败 const today = new Date(); today.setHours(0, 0, 0, 0); // 遍历第一行查找匹配今日日期的列 for (let i = 0; i < firstRow.length; i++) { const cellDate = firstRow[i]; // 仅判定日期类型的单元格 if (cellDate instanceof Date) { cellDate.setHours(0, 0, 0, 0); if (cellDate.getTime() === today.getTime()) { // 数组索引从0开始,表格列号从1开始,所以+1得到对应列号 const targetCol = i + 1; // 获取该列从第二行到最后一行的范围(跳过第一行的日期表头) const targetRange = sheet.getRange(2, targetCol, sheet.getLastRow() - 1, 1); // 仅粘贴数值覆盖原有公式 targetRange.copyTo(targetRange, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); // 找到匹配列后直接退出循环,不需要继续遍历 break; } } } }
使用说明
- 打开目标Google Sheets,点击顶部菜单栏「扩展程序」->「Apps 脚本」进入脚本编辑器
- 删除编辑器内默认的空白代码,将上述代码完整粘贴后点击顶部保存按钮,自定义项目名称后完成保存
- 首次运行需要按照系统提示完成授权,允许脚本访问你的表格内容
- 如果需要每日自动执行该操作,可以在脚本编辑器左侧点击「触发器」,新增触发器时选择上述函数,触发类型设置为「时间驱动」,按需指定每日运行的时间点即可
注意事项
- 若第一行可能存在多个匹配今日的日期列,删除代码中的
break;行即可处理所有匹配的列 - 若需要将第一行的日期表头也转为数值,可将
targetRange的起始行参数从2改为1,行数参数从sheet.getLastRow() - 1改为sheet.getLastRow() - 代码默认处理当前活跃工作表,若需要指定固定工作表,可将
const sheet = ss.getActiveSheet()修改为const sheet = ss.getSheetByName("你的工作表名称"),替换引号内内容为实际工作表名即可
内容的提问来源于stack exchange,提问作者sheetshelpplz
相关产品推荐
相关产品推荐

