簡體   English   中英

Google Sheets Apps Script Copy Row of Data 如果日期與標簽名稱相同

[英]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.

 
粵ICP備18138465號  © 2020-2025 STACKOOM.COM