[英]Google Sheets Apps Script Copy Row of Data If date same as tab name
我發現了一些幾乎可以滿足我需要的代碼,並嘗試使用它來讓它工作,但沒有運氣。 我得到一個導出數據,每一行的最后一列都有日期。
我只想將日期的最后一列行復制到具有相同名稱的選項卡中。
function MoveDate_FourthDEC() {
var ss=SpreadsheetApp.getActive();
var sh1=ss.getSheetByName("Import");
var sh2=ss.getSheetByName("4/12/2020");
var rg1=sh1.getRange(2,1,sh1.getLastRow(),32);//starting at column2
var data=rg1.getValues();
for(var i=0;i<data.length;i++) {
// 13 = collected should be in this column which is column N
if(data[i][31]=="4/12/2020") {
sh2.appendRow(data[i]);
}}}
您的目標是復制AF
列與工作表名稱匹配的所有行。
首先,您可以使用forEach()迭代每個工作表。 對於每個工作表,您要檢查工作表名稱是否與AF
列中的日期匹配。 如果是,那么您只需要過濾列AF
中包含此日期的行並將它們存儲到一個臨時數組中:
let temp_data = data.filter(r=>r[31]==sh.getName());
然后,您可以有效地將所有相關行復制並粘貼到匹配的工作表中:
sh.getRange(sh.getLastRow()+1,1,temp_data.length,temp_data[0].length).setValues(temp_data);
旁注:
在處理日期對象時,您需要考慮工作表中的顯示值。 這就是我使用getDisplayValues而不是getValues 的原因。
由於data
從第二行開始,您需要從最后一行內容中減去一行,以獲得正確的范圍:
getRange(2,1,sh1.getLastRow()-1,32)
我正在使用包含來檢查工作表名稱是否與最后一列匹配。 為了使用includes
您需要將getDisplayValues
函數返回的二維數組平鋪10。
function MoveDate_FourthDEC() {
const ss = SpreadsheetApp.getActive();
const sh1 = ss.getSheetByName("Import");
const shs = ss.getSheets();
const dts = sh1.getRange('AF2:AF'+sh1.getLastRow()).getDisplayValues().flat();
const data=sh1.getRange(2,1,sh1.getLastRow()-1,32).getDisplayValues();
shs.forEach(sh=>{
if (dts.includes(sh.getName())){
let temp_data = data.filter(r=>r[31]==sh.getName());
sh.getRange(sh.getLastRow()+1,1,temp_data.length,temp_data[0].length).setValues(temp_data);
}});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.