date - 使用 Google 脚本在 Google 表格上搜索/匹配日期,并将源范围复制到目标范围 OFFSET 从该日期开始
问题描述
我正在为 Google 表格中的一些简单的复制/粘贴脚本而苦苦挣扎。我是一个完整的脚本新手。Excel/Sheets 高级。
我有一个“今天”数据输入表。我有一个“程序”表,将数据存储在日期标题下的列中。我想要一个宏/脚本,它将: 1. 从今天的范围内剪切数据 2. 在“程序”中搜索日期行以匹配“今天”数据输入页面上的任何日期。
3. 最后将数据粘贴到从步骤 2 中确定的日期开始向下的 Program xx 行的范围内
本质上我想反向索引/匹配。我不想在 INDEX/MATCH 中返回一个单元格,而是想复制到一个单元格。
以下是我所得到的。我可以从特定单元格剪切/粘贴到另一个单元格。但需要以某种方式找出“var destination”。
function copydata2() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var source = ss.getRange('Today!b11:g11');
source.copyTo(ss.getRange('Program!d11:i11'), {contentsOnly: true});
source.clear();
};
解决方案
尝试这个:
function test2() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var today = ss.getSheetByName("Today");
var program = ss.getSheetByName("Program");
var date = today.getRange("B4").getValue();
var targetDates = program.getRange("D4:KL4").getValues();
var column;
// Get the target column.
for (var i = 0; i < targetDates[0].length; i++){
if (targetDates[0][i].toString() == date.toString()){
column = i + 4; // To account for the first cols.
Logger.log("found the date " + targetDates[0][i] + " at column " + column + " with i = " + i);
break;
}
else continue;
}
// Move the values.
today.getRange("B11:G11").moveTo(program.getRange(11, column)); // Sq w/ Belt
today.getRange("J11:O11").moveTo(program.getRange(16, column)); // 2ct Paused Squat
today.getRange("R11:W11").moveTo(program.getRange(21, column)); // Pin Squat
today.getRange("Z11:AE11").moveTo(program.getRange(26, column)); // 3-0-3 Tempo Squat
today.getRange("AH11:AM11").moveTo(program.getRange(31, column)); // Sq no Belt
today.getRange("B19:H19").moveTo(program.getRange(37, column)); // 1 Ct Paused Bench Press
today.getRange("J19:O19").moveTo(program.getRange(42, column)); // Overhead Press w/ Belt
today.getRange("R19:W19").moveTo(program.getRange(47, column)); // Close Grip Bench Press
today.getRange("Z19:AE19").moveTo(program.getRange(52, column)); // 2 Ct Paused Bench Press
today.getRange("AH19:AM19").moveTo(program.getRange(57, column)); // 3 Ct Paused Bench Press
today.getRange("AP19:AU19").moveTo(program.getRange(62, column)); // Pin Bench Press
today.getRange("B27:H27").moveTo(program.getRange(68, column)); // Deadlift w/ Belt
today.getRange("J27:O27").moveTo(program.getRange(73, column)); // Rack Pull - mid shin
today.getRange("R27:W27").moveTo(program.getRange(78, column)); // 2 ct Paused Deadlift
today.getRange("AH27:AM27").moveTo(program.getRange(83, column)); // Pendlay Rows
}
我使用了几件事moveTo()
(此处的文档),它将值剪切/粘贴到目标,唯一的问题是它覆盖了样式格式。使用表格时,最好使用getValues()
并setValues()
避免多次调用 API。但是,在这种情况下,由于您的数据是以一种特殊的方式组织的,因此为了复杂性,最好像这样工作。如果您有任何疑问,请告诉我。我在您提供的工作表的副本上对其进行了测试,它按预期工作。
推荐阅读
- mysql - 无法从动态 sql 将数据检索到变量中
- django - 模板中 for row 循环的使用
- javascript - 清除带有初始值 React 的 Formik 字段
- python - Opencv、Tkinter、Python 3、Mac 上的导入 imutils 错误
- r - ggplot2 在 X 轴上强制日期时间(格式化 HH:MM)
- python - 如何让敌人随机飘来飘去?
- java - 如何在 MVVM 中调用网络两次?
- ada - Ada : 检查除法的结果是否没有十进制数
- kotlin - 有人可以解释这个 Kotlin 表达式吗?
- r - 解释“Rprof”的内存分析输出