【问题标题】:How can I copy information from one sheet to another?如何将信息从一张纸复制到另一张纸?
【发布时间】:2019-09-03 10:26:37
【问题描述】:

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

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

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

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

更新:我已经弄清楚如何复制信息。我要搜索的行从第 5 行的 Copy From 选项卡开始,我的代码可以搜索并将 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);
     }
   }
 }

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    试试这个:

    此函数一次读取所有日期,并通过一个循环比较与今天午夜 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++;
        }
      }
    }
    

    【讨论】:

    • 如果您愿意,请核对答案。谢谢
    • 我还有最后一件事,你知道我怎样才能去删除我刚刚复制过来的那行数据吗?我想我会使用类似“sh.deleteRows(i)”的东西。我确实必须拿出你的“vA.splice(i+d,1);d++;”为了让代码运行并拉出我需要的所有行,我有一个变量 RangetoCopy,我曾经使用“RangetoCopy.copyTo(DestinationRange); 将我的数据复制到新工作表中
    • 现在请给我看完整的代码。您可以将其添加到您的问题中。
    • 我已经用更新的代码编辑了我的问题。感谢您对此的帮助!
    • 这很好用,除了我有 9 行数据要传输过来,我确实将 9 行传输到了新工作表,但是传输的最后一行有今天的日期并且被移动了,实际最后一行应该被转移的行(具有先前的日期)没有被转移。你知道是什么原因造成的吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多