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