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