Google 将多行同时移动到另一行的脚本 Sheet - 归档行并删除已完成
Google Script to Move Multiple Rows Simultaneously to Another Sheet - Archive Rows and Delete Completed
我正在尝试将多行同时从一个 Google sheet 移动到另一个。
我想在一天结束时 运行 一次脚本来存档所有完整的作业。
只要目标单元格不为空,我编写的脚本一次只会移动 2 行。理想情况下,它将继续循环并仅移动标记为 'Complete'.
的作业
我用的sheet是here
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Admin')
.addItem('Archive', 'archive')
.addToUi();
}
function archive()
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Scheduled");
var range = sheet.getRange('A5:Q200');
var sheetToMoveTheRowTo = "Archive";
var numRows = sheet.getLastRow();
var row = sheet.getRange(5,1);
for (var row = 5; row < numRows; row++)
{
var status = sheet.getRange(row,1).getValue();
if ( status == "Complete") {
var targetSheet = ss.getSheetByName(sheetToMoveTheRowTo);
var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
sheet.getRange(range.getRow(),1,1, sheet.getLastColumn()).moveTo(targetRange);
sheet.deleteRow(range.getRow());
}
}
}
存档,Google 工作表,移动,行,电子表格,删除
您应该将所有数据设置为一次操作归档。您不能一次删除所有行,但可以保存要删除的行,然后循环遍历行号。
Link to Publicly Shared Spreadsheet with Code
我会将代码设置为如下结构:
function archive() {
var arrayOfRowsToArchive,data,i,lastColumn,L,numRows,range,rowsToDelete,
ss,sheet,sheetToMoveTheRowTo,startRow,status,targetSheet,thisRowsData;
//USER INPUT:
startRow = 5;
//END OF USER INPUT
ss = SpreadsheetApp.getActiveSpreadsheet();
sheet = ss.getSheetByName("Scheduled");
sheetToMoveTheRowTo = "Archive";
numRows = sheet.getLastRow();
lastColumn = sheet.getLastColumn();
arrayOfRowsToArchive = [];
rowsToDelete = [];
data = sheet.getRange(startRow, 1, numRows - startRow, lastColumn).getValues();//Get all values except the header rows
L = data.length;
for (i=0; i < L; i++) {
status = data[i][0];
//Logger.log('status: ' + status);
if ( status === "Complete") {
thisRowsData = data[i];//Only get inner array of data
//Logger.log('thisRowsData: ' + thisRowsData)
arrayOfRowsToArchive.push(thisRowsData);//Push one row of data to outer array
rowsToDelete.push(i+startRow);//Get the row number to delete later
}
}
targetSheet = ss.getSheetByName(sheetToMoveTheRowTo);
targetSheet.getRange(targetSheet.getLastRow()+1, 1, arrayOfRowsToArchive.length, arrayOfRowsToArchive[0].length)
.setValues(arrayOfRowsToArchive);
//Logger.log('rowsToDelete: ' + rowsToDelete)
for (i=rowsToDelete.length;i>0;i--) {//Delete from bottom up
Logger.log((i-1).toString())
Logger.log('rowsToDelete[i-1]: ' + rowsToDelete[i-1])
sheet.deleteRow(rowsToDelete[i-1]);
}
}
我正在尝试将多行同时从一个 Google sheet 移动到另一个。
我想在一天结束时 运行 一次脚本来存档所有完整的作业。
只要目标单元格不为空,我编写的脚本一次只会移动 2 行。理想情况下,它将继续循环并仅移动标记为 'Complete'.
的作业我用的sheet是here
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Admin')
.addItem('Archive', 'archive')
.addToUi();
}
function archive()
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Scheduled");
var range = sheet.getRange('A5:Q200');
var sheetToMoveTheRowTo = "Archive";
var numRows = sheet.getLastRow();
var row = sheet.getRange(5,1);
for (var row = 5; row < numRows; row++)
{
var status = sheet.getRange(row,1).getValue();
if ( status == "Complete") {
var targetSheet = ss.getSheetByName(sheetToMoveTheRowTo);
var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
sheet.getRange(range.getRow(),1,1, sheet.getLastColumn()).moveTo(targetRange);
sheet.deleteRow(range.getRow());
}
}
}
存档,Google 工作表,移动,行,电子表格,删除
您应该将所有数据设置为一次操作归档。您不能一次删除所有行,但可以保存要删除的行,然后循环遍历行号。
Link to Publicly Shared Spreadsheet with Code
我会将代码设置为如下结构:
function archive() {
var arrayOfRowsToArchive,data,i,lastColumn,L,numRows,range,rowsToDelete,
ss,sheet,sheetToMoveTheRowTo,startRow,status,targetSheet,thisRowsData;
//USER INPUT:
startRow = 5;
//END OF USER INPUT
ss = SpreadsheetApp.getActiveSpreadsheet();
sheet = ss.getSheetByName("Scheduled");
sheetToMoveTheRowTo = "Archive";
numRows = sheet.getLastRow();
lastColumn = sheet.getLastColumn();
arrayOfRowsToArchive = [];
rowsToDelete = [];
data = sheet.getRange(startRow, 1, numRows - startRow, lastColumn).getValues();//Get all values except the header rows
L = data.length;
for (i=0; i < L; i++) {
status = data[i][0];
//Logger.log('status: ' + status);
if ( status === "Complete") {
thisRowsData = data[i];//Only get inner array of data
//Logger.log('thisRowsData: ' + thisRowsData)
arrayOfRowsToArchive.push(thisRowsData);//Push one row of data to outer array
rowsToDelete.push(i+startRow);//Get the row number to delete later
}
}
targetSheet = ss.getSheetByName(sheetToMoveTheRowTo);
targetSheet.getRange(targetSheet.getLastRow()+1, 1, arrayOfRowsToArchive.length, arrayOfRowsToArchive[0].length)
.setValues(arrayOfRowsToArchive);
//Logger.log('rowsToDelete: ' + rowsToDelete)
for (i=rowsToDelete.length;i>0;i--) {//Delete from bottom up
Logger.log((i-1).toString())
Logger.log('rowsToDelete[i-1]: ' + rowsToDelete[i-1])
sheet.deleteRow(rowsToDelete[i-1]);
}
}