Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 谷歌脚本复制和重复行_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 谷歌脚本复制和重复行

Google apps script 谷歌脚本复制和重复行,google-apps-script,google-sheets,Google Apps Script,Google Sheets,大家好,我对脚本一点也不擅长,只是需要一些帮助,我想做的是根据单元格F和G中的信息复制和重复单元格a、b、c、d、e 在单元格d和e中是日期,它们需要在单元格F中增加值,并根据G中的值不断重复,我制作了一张样本表,在表中输入的是数据,在表中输出的是我需要的结果。但所有信息都需要保留在输入表上,而不是另一张表上。希望你能理解我的意思,当你看到样本表。在f单元的表格上写着“周”,这几天比几周好 Title Description Location Start Time

大家好,我对脚本一点也不擅长,只是需要一些帮助,我想做的是根据单元格F和G中的信息复制和重复单元格a、b、c、d、e

在单元格d和e中是日期,它们需要在单元格F中增加值,并根据G中的值不断重复,我制作了一张样本表,在表中输入的是数据,在表中输出的是我需要的结果。但所有信息都需要保留在输入表上,而不是另一张表上。希望你能理解我的意思,当你看到样本表。在f单元的表格上写着“周”,这几天比几周好

Title   Description     Location        Start Time      End Time     repeate every  how many times to repeat                                                                            
test    tester          here            9/7/17 20:00    9/7/17 20:10    2 weeks     4                                                                           
fake    data            home            15/7/17 15:00   15/7/17 16:00   4 weeks     3

我试图实现的总体目标是,在提交表单时,能够使用脚本自动将重复发生的事件添加到Google日历中,但是,如果我可以在工作表中重复我需要的数据,我可以自动将其同步到日历,然后我可以根据天设置重复事件,因为我相信日历的重复事件只允许你每天、每周、每月进行


或者有人能告诉我一个网站,在那里我可以找到一些信息来帮助我吗?

我把重复时间改为几天而不是几周

function repeatingEvents() 
{
    var ss=SpreadsheetApp.getActiveSpreadsheet();
    var sht=ss.getSheetByName('Repeat');
    var rng=sht.getDataRange();//Get all of the data on the sheet
    var rngA=rng.getValues();
    var day=86400000;//milliseconds in a day
    var week=604800000;//millisecond in a week
    for(var i=0;i<rngA.length;i++)
    {
      if(rngA[i][6]>0)//If the number of repeats is greater than zero
      {
        var cnt=Number(rngA[i][6]);//cnt is number of repeats
        for(var n=0;n<cnt;n++)
        {
          var row=[];
          row.push(rngA[i][0]);//column A
          row.push(rngA[i][1]);//column B
          row.push(rngA[i][2]);//column C
          row.push(new Date(rngA[i][3].getTime() + (rngA[i][5] * (n + 1) * day)));//old date time plus repeat duration * repeat count * milliseconds in a day in column D
          row.push(new Date(rngA[i][4].getTime() + (rngA[i][5] * (n + 1) * day)));//column E
          row.push(rngA[i][5]);//Column F
          row.push('');//column G get zeroed out so script won't come back and do it again without human interaction
          sht.appendRow(row);//add new event
         }
         sht.getRange(i+1,7).setValue(0);//zero out initial number of repeats because I use this to determine when repeats are required
      }
    }
    sht.getRange(2,1,sht.getLastRow(),sht.getLastColumn()).sort({column:4,ascending:true});//Sort Spreadsheet by starting date
}
函数repeatingEvents()
{
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sht=ss.getSheetByName('Repeat');
var rng=sht.getDataRange();//获取工作表上的所有数据
var rngA=rng.getValues();
var day=86400000;//一天中的毫秒数
var week=604800000;//一周内的毫秒
for(var i=0;i0)//如果重复次数大于零
{
var cnt=Number(rngA[i][6]);//cnt是重复次数

对于(var n=0;n我已经将F列和G列更改为G列和H列,我尝试编辑脚本以处理此问题,所有这些似乎都可以工作,除了当它添加重复的天数时,它仍然将它们添加到F列中,而不是G列似乎无法理解为什么

函数repeatingEvents()
{
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sht=ss.getSheetByName(“日历”);
var rng=sht.getDataRange();//获取工作表上的所有数据
var rngA=rng.getValues();
var day=86400000;//一天中的毫秒数
var week=604800000;//一周内的毫秒
for(var i=0;i0)//如果重复次数大于零
{
var cnt=Number(rngA[i][7]);//cnt是重复次数

对于(var n=0;nCan有人能告诉我一个网站,在那里我可以找到一些信息来帮助我吗?那很好,非常感谢,如果你有时间解释它的每一部分,请做,如果不是问题,我也只想学习..查看评论。我对亮点进行了评论。这不是很复杂。谢谢,有办法吗在这个函数结束后调用另一个函数,或者我只需要在触发器上设置它们?你可以将新函数调用放在这个脚本的末尾。但是请记住,两个脚本都必须在6分钟或更短的时间内完成。好的,很酷,谢谢,下一个脚本是将它全部发送到Google日历,下一步我要尝试做的是检查结尾d如果结束日期已过,则将该行移动到另一个工作表,但应该更容易解决如何操作,再次感谢。我看到了您的评论,我猜您在E和F之间添加了一列。因此,我修改了附加到重复行的行。查看我对脚本的编辑。我还添加了列字母。我只是copyi将新列F中的任何内容重新添加到附加行的该列中。如果您将一个新列添加到另一个位置,请在电子表格中进行更改,以便我可以为您进行适当的更正。您将添加的列放在添加到google日历时我添加的id列中,但这是一个需要更改的大量脚本我不太明白,我只是想让日历脚本在这一次完成后运行,但是如果你没有任何建议,设置脚本每小时运行一次可能会更容易,再次感谢你的帮助,我真的非常感谢你的帮助。如果你看一下我发布的原始谷歌表单,你会看到我的输出运行脚本时获取,即使当我更改脚本以尝试对齐时,我也肯定遗漏了一些内容,因为它仍然将重复天数放在F列中。感谢该部分现在已全部工作,我已将找到的“同步到日历”脚本添加到链接表中,它一开始工作正常,但现在已停止工作,我在lin上遇到一个错误e 337,我计算出错误是因为我添加了额外的3列(G、H和i)但不知道如何修复它,如果你有时间,请你看一下,第41行是cal id,但我删除了id,G列,H列,我不需要同步到日历,再次感谢。我不熟悉该脚本,也许你应该联系作者,或者作为另一个问题提交。可能还有其他人在这个座位上我知道那个剧本。
function repeatingEvents() 
{
    var ss=SpreadsheetApp.getActiveSpreadsheet();
    var sht=ss.getSheetByName('input');
    var rng=sht.getDataRange();//Get all of the data on the sheet
    var rngA=rng.getValues();
    var day=86400000;//milliseconds in a day
    var week=604800000;//millisecond in a week
    for(var i=0;i<rngA.length;i++)
    {
      if(rngA[i][7]>0)//If the number of repeats is greater than zero
      {
        var cnt=Number(rngA[i][7]);//cnt is number of repeats
        for(var n=0;n<cnt;n++)
        {
          var row=[];
          row.push(rngA[i][0]);//A
          row.push(rngA[i][1]);//B
          row.push(rngA[i][2]);//C
          row.push(new Date(rngA[i][3].getTime() + (rngA[i][6] * (n + 1) * day)));//old date time plus repeat duration * repeat count * milliseconds in a day D
          row.push(new Date(rngA[i][4].getTime() + (rngA[i][6] * (n + 1) * day)));//E
          row.push(rngA[i][5]);//F
          row.push(rngA[i][6]);//G
          row.push('');//H
          sht.appendRow(row);//add new event
         }
         sht.getRange(i+1,8).setValue(0);//zero out initial number of repeats because I use this to determine when repeats are required
      }
    }
    sht.getRange(2,1,sht.getLastRow(),sht.getLastColumn()).sort({column:4,ascending:true});//Sort Spreadsheet by starting date
}