我正在尝试编写一个脚本,将信息从一个工作表复制到谷歌工作表中的另一个工作表,作为每日更新。信息是按行显示的(例如,第5行包含我要复制的所有信息,列A是输入的日期)如果条目(列A)上的日期与今天的日期不匹配,则需要将整行转移到另一张表中。
我无法将包含输入信息的日期的单元格与今天的日期进行比较,然后捕获该单元格的行号,然后设置要复制的变量。
在新工作表上,它需要扫描下一个空行的范围,然后将信息粘贴到下一个空行中。
目前,我已经为一个单元格设置了复制/粘贴,但我将为整行单元格设置它。
更新:我已经知道如何将信息复制过来。我要搜索的行位于第5行的Copy From选项卡上,我的代码可以搜索B列中输入信息的日期,并将其与今天的日期进行比较。然后,将该行中的信息复制到新的“复制到”选项卡。
我现在想弄清楚如何从Copy from选项卡中删除信息,以便它只在我的电子表格中存在一次,要么在Copy From选项卡上(如果输入的信息是今天或将来的日期),要么在Copy To选项卡上(如果输入的信息来自今天之前的日期)。为此,我在底部添加了一行代码,但当我运行我的代码时,它复制了一些信息,同时删除了其他部分,并复制了今天日期的信息。对此有什么帮助吗?
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);
}
}
}
发布于 2019-04-13 02:29:16
试试这个:
此函数一次读取所有日期,并运行一个循环,将所有日期与今天午夜12:00的日期进行比较。任何>或= todays date都将从输出中删除。
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++;
}
}
}
https://stackoverflow.com/questions/55655292
复制相似问题