带有 Apps 脚本的表格上的复制和删除功能
Copy & Delete Function on Sheets w/ Apps Script
有人提交 Google 表单回复后,他们的回复会转到 DropRequests sheet(尽管由于某些原因当前未链接表单)。
我们想要做的是在有人提交他们的表单并且他们的回复进入 DropRequests sheet 之后,如果 C 列中的值与 StudentMatches sheet 中 F 列中的值相匹配, 它被移动到 OldMatches sheet。我们已经开始使用下面的代码,但它还不能工作。关于如何实现此功能并解决最后一行范围问题的任何想法?
function moveMatch(){
var oldmatches = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("OldMatches");
var droprequest = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("DropRequests");
var currentmatches = SpreadsheetApp.openById('1dd9UhD2LpshCFVYizpf3OwI1XzPrq3AfqhMAO1iJ6Ns')
value1 = currentmatches.getRange("F:F").getDisplayValues();
value2 = droprequest.getRange("C:C").getDisplayValues();
for(var i in value1)
if(value2[0,i]=value1){
currentmatches.getDataRange.getRow(0,i).moveTo(oldmatches.getLastRow())
}
}
再次感谢。
我相信你的目标如下。
- 您的 Spreadsheet.
中有 3 sheet 个 DropRequests
、StudentMatches
、OldMatches
- 您想从
DropRequests
sheet 中检索“C”列的值,并想将这些值与 StudentMatches
[=] 的“F”列的值进行比较61=]s.
- 当值匹配时,您想将行从
StudentMatches
sheet 移动到 OldMatches
sheet.[=48= 的第一个空行]
- 当使用
moveTo
时,移动的行变为空行。在你的目标中,你想要这种情况。
在这种情况下,下面的示例脚本怎么样?
示例脚本:
function moveMatch() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var srcSheet1 = ss.getSheetByName("DropRequests");
var srcSheet2 = ss.getSheetByName("StudentMatches");
var dstSheet = ss.getSheetByName("OldMatches");
var srcValues1 = srcSheet1.getRange("C2:C" + srcSheet1.getLastRow()).getValues().map(([c]) => c);
var [,...srcValues2] = srcSheet2.getDataRange().getValues();
var values = srcValues2.flatMap((r, i) => srcValues1.includes(r[5]) ? i + 2 : []);
if (values.length == 0) return;
var lastCol = srcSheet2.getLastColumn();
var lastRow = dstSheet.getLastRow();
values.forEach((r, i) => srcSheet2.getRange(r, 1, 1, lastCol).moveTo(dstSheet.getRange(lastRow + 1 + i, 1)));
}
- 在此修改中,值是从“DropRequests”和“StudentMatches”的列“C”中检索的。并且,将“DropRequests”的“C”列的值与“StudentMatches”的“F”列的值进行比较sheet。当值匹配时,该行将从“StudentMatches”移动到“OldMatches”。
注:
首先,请再次检查 sheet 个名称。
此示例脚本用于回答您的问题。因此,当 Spreadsheet 更改时,此脚本可能无法使用。请注意这一点。
参考文献:
有人提交 Google 表单回复后,他们的回复会转到 DropRequests sheet(尽管由于某些原因当前未链接表单)。
我们想要做的是在有人提交他们的表单并且他们的回复进入 DropRequests sheet 之后,如果 C 列中的值与 StudentMatches sheet 中 F 列中的值相匹配, 它被移动到 OldMatches sheet。我们已经开始使用下面的代码,但它还不能工作。关于如何实现此功能并解决最后一行范围问题的任何想法?
function moveMatch(){
var oldmatches = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("OldMatches");
var droprequest = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("DropRequests");
var currentmatches = SpreadsheetApp.openById('1dd9UhD2LpshCFVYizpf3OwI1XzPrq3AfqhMAO1iJ6Ns')
value1 = currentmatches.getRange("F:F").getDisplayValues();
value2 = droprequest.getRange("C:C").getDisplayValues();
for(var i in value1)
if(value2[0,i]=value1){
currentmatches.getDataRange.getRow(0,i).moveTo(oldmatches.getLastRow())
}
}
再次感谢。
我相信你的目标如下。
- 您的 Spreadsheet. 中有 3 sheet 个
- 您想从
DropRequests
sheet 中检索“C”列的值,并想将这些值与StudentMatches
[=] 的“F”列的值进行比较61=]s. - 当值匹配时,您想将行从
StudentMatches
sheet 移动到OldMatches
sheet.[=48= 的第一个空行] - 当使用
moveTo
时,移动的行变为空行。在你的目标中,你想要这种情况。
DropRequests
、StudentMatches
、OldMatches
在这种情况下,下面的示例脚本怎么样?
示例脚本:
function moveMatch() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var srcSheet1 = ss.getSheetByName("DropRequests");
var srcSheet2 = ss.getSheetByName("StudentMatches");
var dstSheet = ss.getSheetByName("OldMatches");
var srcValues1 = srcSheet1.getRange("C2:C" + srcSheet1.getLastRow()).getValues().map(([c]) => c);
var [,...srcValues2] = srcSheet2.getDataRange().getValues();
var values = srcValues2.flatMap((r, i) => srcValues1.includes(r[5]) ? i + 2 : []);
if (values.length == 0) return;
var lastCol = srcSheet2.getLastColumn();
var lastRow = dstSheet.getLastRow();
values.forEach((r, i) => srcSheet2.getRange(r, 1, 1, lastCol).moveTo(dstSheet.getRange(lastRow + 1 + i, 1)));
}
- 在此修改中,值是从“DropRequests”和“StudentMatches”的列“C”中检索的。并且,将“DropRequests”的“C”列的值与“StudentMatches”的“F”列的值进行比较sheet。当值匹配时,该行将从“StudentMatches”移动到“OldMatches”。
注:
首先,请再次检查 sheet 个名称。
此示例脚本用于回答您的问题。因此,当 Spreadsheet 更改时,此脚本可能无法使用。请注意这一点。