[英]Script for Google Sheets to Move Row to New Sheet
我要設置的購物時間表存在一些問題。 當某些數據輸入到“ J”列中時,我希望將整行移動到相應的新標簽頁。 我為我創建的樣本表添加了一個可編輯的鏈接,該鏈接還有助於說明我要執行的操作。
如果可能的話,將背景也更改為樣本表上的顏色也是有幫助的。
謝謝!
可編輯的鏈接: https : //docs.google.com/spreadsheets/d/1D0iptPchrrLuq75ysvXwisBa_Xr0fuNabAdTb3sm-yA/edit? usp =sharing
這是一個粗略的代碼,可以工作,但是,如果將值更改為與之相同的值(因此,如果值已完成,然后將其編輯為20),它將刪除該行。 修復起來很容易,但是我現在沒有時間:)
編輯:剛剛記得要注意,它將使用最后一行,因此,為了將內容移回約會,您應該將圖例移到工作表的頂部:)否則,您應該完全擺脫移回約會的位置。 您還可以嘗試使用變量的處理方式,我只是不喜歡再次獲取工作表,因此我將其中的許多函數發送給move函數。
function onEdit(e) {
var spreadSheet = SpreadsheetApp.getActiveSpreadsheet(); //get active spreadsheet
var srcSheet = spreadSheet.getActiveSheet(); //get active sheet
var editCol = e.range.getColumn(); //check the edited column
if (editCol!==10) {return} //if the edited column is not J then we don't need to do anything else
var srcLastCol = srcSheet.getLastColumn(); //check how large is our data range
var srcRow = srcSheet.getRange(e.range.getRow(), 1, 1, srcLastCol); //get the source row range
var srcVals = srcRow.getValues(); //get the values from the source fow
var destSheet, destRow, destRange; //destination variables
Logger.log(e.value)
if (e.value>=1 && e.value<=14) { //for 1-14 we use we assign 1 sheet, the same function for everything
moveRow('In Shop', srcRow, srcVals, srcLastCol, spreadSheet);
}
else { //for everything else we use a switch
switch(e.value) {
case '15':
moveRow('Arrive / In Lot', srcRow, srcVals, srcLastCol, spreadSheet);
break;
case '17':
moveRow('Waiting on Parts, Truck, Etc.', srcRow, srcVals, srcLastCol, spreadSheet);
break;
case '20':
moveRow('Completed', srcRow, srcVals, srcLastCol, spreadSheet);
break;
default :
moveRow('Appointments', srcRow, srcVals, srcLastCol, spreadSheet);
}
}
}
function moveRow(destName, srcRow, srcVals, srcLastCol, spreadSheet) {
var destRow
var destSheet = spreadSheet.getSheetByName(destName)
destRow = destSheet.getLastRow() + 1;
destSheet.getRange(destRow, 1, 1, srcLastCol).setValues(srcVals)
srcRow.clear()
}
EDIT2回答評論
function moveRow(destName, srcRow, srcVals, srcLastCol) {
var spreadSheet = SpreadsheetApp.getActiveSpreadsheet()
var destRow
var destSheet = spreadSheet.getSheetByName(destName)
destRow = destSheet.getLastRow() + 1;
destSheet.getRange(destRow, 1, 1, srcLastCol).setValues(srcVals)
srcRow.clear()
}
但是,對於任何運行時間較長的較大腳本來說,這都是不好的做法。 然后,您將浪費時間每次訪問SpreadsheetApp。
至於顏色,這是對moveRow()的相當簡單的調整:
function moveRow(destName, srcRow, srcVals, srcLastCol, spreadSheet) {
var destRow
var destSheet = spreadSheet.getSheetByName(destName);
destRow = destSheet.getLastRow() + 1;
var destRange = destSheet.getRange(destRow, 1, 1, srcLastCol);
destRange.setValues(srcVals);
destRange.setBackground(destSheet.getTabColor())
srcRow.clear()
}
至於排序,這是您需要安裝destSheet = spreadSheet.getSheetByName(destName);
在調用moveRow()之前。 因此,讓我們假設您在if
或if
本身之前的某個位置檢索了destSheet。 該示例將按升序對A列進行排序(因此將1調整為所需值,假設您想要J,那么它將為10)。
if (e.value>=1 && e.value<=14) {
moveRow('In Shop', srcRow, srcVals, srcLastCol, spreadSheet);
destSheet.sort(1)acceding order
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.