Google Sheets单侧锁定范围复制粘贴及按日期查找行号的Apps Script实现问题
调整后可直接使用的脚本
function myFunction1() { const spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); const sheet = spreadsheet.getActiveSheet(); // 固定操作指定工作表可替换为下行,把「数据表」改成你的实际表名 // const sheet = spreadsheet.getSheetByName("数据表"); // 获取目标日期和B列的日期搜索范围 const targetDate = sheet.getRange("H2").getValue(); const maxSearchRow = 3995; const columnBData = sheet.getRange(`B2:B${maxSearchRow}`).getValues().flat(); // 匹配H2指定日期的对应行 const matchedIndex = columnBData.findIndex(item => { return item && item.getTime() === targetDate.getTime(); }); if (matchedIndex === -1) { SpreadsheetApp.getUi().alert("B列未找到匹配日期,请确认H2日期格式与B列一致"); return; } const endRow = matchedIndex + 2; // 执行范围粘贴数值操作 const operateRange = sheet.getRange(`A2:F${endRow}`); operateRange.copyTo(operateRange, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); sheet.getRange("A1:B1").activate(); }
逻辑说明
- 日期匹配通过时间戳对比,避免出现显示格式一致但数据类型不同导致的匹配失败问题,匹配不到时会弹出提示避免误操作
- 搜索范围严格限定在B2:B3995,最终操作范围不会超出A2:F3995的最大限制
- 对生成的范围执行原地粘贴数值操作,原有公式会被清空替换为固定值,后续修改单元格不会影响这段历史数据
- 不需要激活范围再操作,脚本运行效率比原参考版本更高
内容的提问来源于stack exchange,提问作者ZMyrrh
相关产品推荐
相关产品推荐

