首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将信息从一个工作表复制到另一个工作表?

如何将信息从一个工作表复制到另一个工作表?
EN

Stack Overflow用户
提问于 2019-04-12 23:46:40
回答 1查看 143关注 0票数 0

我正在尝试编写一个脚本,将信息从一个工作表复制到谷歌工作表中的另一个工作表,作为每日更新。信息是按行显示的(例如,第5行包含我要复制的所有信息,列A是输入的日期)如果条目(列A)上的日期与今天的日期不匹配,则需要将整行转移到另一张表中。

我无法将包含输入信息的日期的单元格与今天的日期进行比较,然后捕获该单元格的行号,然后设置要复制的变量。

在新工作表上,它需要扫描下一个空行的范围,然后将信息粘贴到下一个空行中。

目前,我已经为一个单元格设置了复制/粘贴,但我将为整行单元格设置它。

更新:我已经知道如何将信息复制过来。我要搜索的行位于第5行的Copy From选项卡上,我的代码可以搜索B列中输入信息的日期,并将其与今天的日期进行比较。然后,将该行中的信息复制到新的“复制到”选项卡。

我现在想弄清楚如何从Copy from选项卡中删除信息,以便它只在我的电子表格中存在一次,要么在Copy From选项卡上(如果输入的信息是今天或将来的日期),要么在Copy To选项卡上(如果输入的信息来自今天之前的日期)。为此,我在底部添加了一行代码,但当我运行我的代码时,它复制了一些信息,同时删除了其他部分,并复制了今天日期的信息。对此有什么帮助吗?

代码语言:javascript
复制
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);
     }
   }
 }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-13 02:29:16

试试这个:

此函数一次读取所有日期,并运行一个循环,将所有日期与今天午夜12:00的日期进行比较。任何>或= todays date都将从输出中删除。

代码语言:javascript
复制
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)和我并没有从源表中删除任何内容。

但是,您所做的是将数据从源移动到目标,因此您希望能够在循环时删除当前行。这就是这个函数。

代码语言:javascript
复制
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++;
    }
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55655292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档