我正在尝试编写一个脚本,以将信息从Google表格中的一个工作表复制到另一个工作表,作为每日更新。该信息按行显示(例如第5行包含我要复制的所有信息,其中A列为输入的日期) 如果条目(列A)上的日期与今天的日期不匹配,则需要将整行转移到另一张纸上。
我无法将包含输入信息的日期的单元格与今天的日期进行比较,然后捕获该单元格的行号,然后设置要复制的变量。
在新工作表上,它需要扫描下一个空白行的范围,然后将信息粘贴到下一个空白行。
目前,我为一个单元格设置了要复制/粘贴的位置,但是我将为整个单元格设置它。
更新:我已经弄清楚了如何复制信息。我要搜索的行从第5行的“复制自”选项卡开始,我的代码可以搜索并比较信息在B列中输入的日期和今天的日期。然后,带有的代码会将该行中的信息复制到新的“复制到”选项卡上。
我现在想弄清楚如何从“复制自”选项卡中删除信息,以便该信息仅在我的电子表格中存在一次,无论是在“复制自”选项卡上(如果输入的信息是今天的日期还是将来的日期) )或“复制到”标签上(如果输入的信息来自今天的日期之前)。我在底部添加了一行代码来执行此操作,但是在运行代码时,它会复制一些信息,同时删除其他部分,并复制今天的信息。有什么帮助吗?
function funcname() {
var Sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Copy From");
var Sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Copy To");
var ColumntoSearch = 2;
var LastRow = Sheet.getLastRow();
//Gets column to search for dates to compare to Today
var Range = Sheet.getRange(5, ColumntoSearch, LastRow, 1);
var Values = Range.getValues();
//Sets the amount of data to copy over
var NumberofColumns = 27;
var NumberofRows = 1;
var DestRow = Sheet2.getLastRow()+1;
//Compares all the Dates in the Copy From tab to Today
var dt=new Date();
var dt1=new Date(dt.getFullYear(),dt.getMonth(),dt.getDate());
var dv=new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()).valueOf();
var d=0;
for (var i=0;i+d<Values.length;i++){
//If dates are less than today, they will be copied over to the Copy To tab
if(new Date(Values[i+d][0]).valueOf()<dv){
var RangetoCopy = Sheet.getRange((i+5), 1, NumberofRows, NumberofColumns);
var DestRange = Sheet2.getRange(DestRow, 1, NumberofRows, NumberofColumns);
DestRow++;
RangetoCopy.copyTo(DestRange);
Sheet.deleteRows(i+7);
}
}
}
答案 0 :(得分:0)
尝试一下:
此函数一次读取所有日期,并循环运行,比较午夜12:00到今天的所有日期。 >或=今天的日期将从输出中删除。
function copyDateNotEqualToToday() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName("Copy From");
var sh2=ss.getSheetByName("New Sheet");
var rg=sh.getRange(5,1,sh.getLastRow()-4,1);
var vA=rg.getValues();
var dt=new Date();
var dt1=new Date(dt.getFullYear(),dt.getMonth(),dt.getDate());
var dv=new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()).valueOf();
var d=0;
for (var i=0;i+d<vA.length;i++){
if(new Date(vA[i+d][0]).valueOf()>=dv){
vA.splice(i+d,1);
d++;
}
}
sh2.getRange(1,1,vA.length,1).setValues(vA);
}
我的输入表:
我的输出表:
我在做什么与您在做什么有些不同。我正在使用您所谓的“值”数组中所有当日>或=的元素,并将其从数组中删除。遍历所有行之后,我然后使用...将所有值复制到目标表中以使用您的条款setValues(Values)
,而我并没有从源表中删除任何内容。
但是,您正在做的是将数据从源移动到目标,因此您希望能够在循环时删除当前行。这就是该功能。
function copyIfLessThan() {
var Sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Copy From");
var Sheet2=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Copy To");
var Range=Sheet.getRange(5,2,Sheet.getLastRow(),1);
var Values=Range.getValues();
var dt=new Date();
var dv=new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()).valueOf();
var d=0;
for(var i=0;i<Values.length;i++) {
if(new Date(Values[i][0]).valueOf()<dv){
var RangetoCopy=Sheet.getRange(i-d+6,1,1,27);
var DestRange=Sheet2.getRange(Sheet2.getLastRow()+1,1,1,27);
RangetoCopy.copyTo(DestRange);
Sheet.deleteRows(i-d+6);//removing rows not elements of Values Array
d++;
}
}
}