在Google表格#2中的日期范围内的每一天添加一行并复制原始行中的信息

时间:2017-07-30 04:02:02

标签: date google-sheets range

我有一张Google表格,其中会转储Google表单中的信息。其中两列创建了一个日期范围(列C和G),我希望工作表能够自动为该范围的每个日期创建一行新信息,并复制原始行中所有其他信息的每一行。创建。最后,该范围内的每个日期都有自己的行,无论是2天还是25天,并且通过表单收集的所有信息都存在于每一天。如果G列中没有日期,则只有一天的行程,不需要额外的行。为了在有人提交表单时使事情变得更加困难,将信息输入到它填充的最后一行的正下方的行中,因此这些由日期范围填充的新行将需要在工作表中,可能从第2000行开始或更多,因为这张表将在几个月内获得大量信息。正如您在示例中看到的那样,工作簿中还有另一个执行所有排序的工作表。谢谢你的帮助。

Sample Document

1 个答案:

答案 0 :(得分:0)

您需要创建表单提交事件并将以下代码附加到其中。此外,您还需要创建工作表名称' ResponseReview'。

function formSubmitEvent1(e) 
{
    var ss=SpreadsheetApp.openById('SpreadsheetID');
    var sht=ss.getSheetByName('ResponseReview');
    sht.appendRow(e.values);
}

上面的代码需要openById方法中的SpreadsheetId。此代码会将任何新行附加到ResponseReview表的末尾。

以下代码将展开任何在第3列和第7列中具有日期的主题,并且还将从第一行中删除第7列中的结束日期。我使用的事实是,如果第3列不为空且第7列不是,第7列不等于第3列,那么这就是需要扩展的行。因此,我必须删除结束日期,以便在将来再次运行时不会继续扩展。如果你需要保留而不是结束日期,我们可以想出其他的东西。我们可以在最后添加一个不要扩展的列。

function convertRangetoRows()
{
  var ss=SpreadsheetApp.getActive();
  var sht=ss.getSheetByName('ResponseReview');
  var rng=sht.getDataRange();
  var rngA=rng.getValues();
  var rngB=[];
  var day=86400000;
  rngB.push(rngA[0]);
  for(var i=1;i<rngA.length;i++)
  {
    rngB.push(rngA[i]);  
    if(rngA[i][2] && rngA[i][6] && rngA[i][2]!=rngA[i][6])
    {
      var row=rngA[i].slice();//returns a new copy of the array by value
      rngA[i][6]='';//deletes the end date by reference so it also deletes the one thats already been pushed into rngB
      var dt0=new Date(row[2]);
      var dt1=new Date(row[6]);
      var days=(dt1.valueOf()-dt0.valueOf())/day;
      var dt=dt0.valueOf();
      for(j=0;j<days;j++)
      {
        dt+=day;
        row[2]=Utilities.formatDate(new Date(dt), Session.getScriptTimeZone(), "MM/dd/yyyy");//original array unchanged
        row[6]='';//original array unchanged
        rngB.push(row.slice());//push in a copy
      }
    }
   var intermediate='nothing'; 
  }
  var outrng=sht.getRange(1,1,rngB.length,rngB[0].length);
  outrng.setValues(rngB);
  var end='the end is near';
}

这是我的电子表格在运行扩展功能之前的样子:

enter image description here

之后:

enter image description here

现在,您可以将表格单独链接到表单,并将其作为已提交数据的存档。