我有一个Google表格,Google表格中的信息被转储。其中两列创建一个日期范围(C列和G列),我希望工作表为每个范围的日期自动创建一行新的信息,并复制原始行中的所有其他信息创建。最后,范围中的每个日期都有它自己的行,不管它是2天还是25天,并且通过表单收集的所有信息每天都会出现。如果G列中没有日期,则只有一天的行程,并且不需要额外的行。当有人提交表单时,为了让事情变得更加困难,信息将被输入到最后一行填充的行的正下方,因此这些由日期范围填充的新行将需要放在表单中,可能从行2000开始,或者更多的是因为这张表在几个月内会有很多信息。正如您在示例中看到的那样,工作簿中还有另一张表单执行所有排序。谢谢你的帮助。在Google表格中添加一行并复制日期范围内每天在原始行中的信息#2
回答
您将需要创建一个表单提交事件,下面的代码附加到它。您还需要创建一个表格名称'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';
}
这是我的电子表格看起来运行扩展功能之前:
后:
现在你可以离开挂片单独的形式,并让它成为提交数据的档案。
@Saket感谢有关使用slice()按值传递数组的信息。 – Cooper
我讨厌这种愚蠢!试图按照你的指示,并得到一个错误:'TypeError:无法从undefined读取属性“值”。 (第5行,“代码”文件)。这里是实际电子表格的链接。请工作你的魔术,然后我会取消共享并尝试学习... https://docs.google.com/spreadsheets/d/1Pq_jlzMMvKY99HGc9iFrxjXshkZc2lb4Vde0YsFQc-c/edit?usp = sharing –
你无法运行此功能函数formSubmitEvent1(e) { var ss = SpreadsheetApp.openById('1Pq_jlzMMvKY99HGc9iFrxjXshkZc2lb4Vde0YsFQc-c'); var sht = ss.getSheetByName('ResponseReview'); sht.appendRow(e.values);直接。您必须将其挂接到onFormSubmit触发器。没有触发器,它们不是事件,所以event.values是未定义的。 e参数表示事件对象。 – Cooper
- 1. 在Google表格中为日期范围内的每一天添加一行并复制原始行中的信息
- 2. 如何在日期范围内为每一天插入一行?
- 3. 每天在两列的范围内向数据框添加行
- 4. 在Google表格中添加一行JavaScript
- 5. 在日期范围内计算天数?
- 6. 在查询中为变量添加日期范围+5天
- 7. Google表格 - 根据字符串添加日期范围
- 8. 在多个日期范围内的开始日期和结束日期范围
- 9. 如何在每天的日期范围内查找日期范围内的记录
- 10. 生成日期范围天行
- 11. 根据另一个表中的日期选择日期范围内的行。 (MYSQL)
- 12. 每个日期在Google表格中传递时自动锁定范围(列)?
- 13. D3按小时计日期范围;每7天重复一次
- 14. 列出重复日期从一行中的第2行开始
- 15. 将每一行包装在范围内
- 16. 如何更改日期格式并在日期中添加一天
- 17. Q(KDB)在日期范围内选择今天的日期
- 18. PHP的日期添加一天内,从数据库中的信息
- 19. 查找范围内的记录+/-在三天的日期范围内在
- 20. 在Google表格中添加数据范围的脚本
- 21. 基于今天的日期在google电子表格中移动一行
- 22. 下拉,在每一行(PHP)2信息
- 23. 添加一天到日期向量中的每个日期
- 24. 访问2010一个表格在表格1和表格2中添加信息
- 25. 计算日期范围内的天数
- 26. 日期范围内的天数
- 27. 每行分组日期范围
- 28. 在一行中添加JavaScript日期
- 29. Oracle SQL将多行插入到日期范围内的表中
- 30. 如何在Google文档中复制行范围?
我认为最好留下与表单单独关联的工作表。不要对它做任何事情。这是一个保存提交内容的好地方。当你得到一个表单提交,然后使用onFormSubmit触发器将新行附加到另一个工作表。我打电话给我的ResponseReview。那么你可以用它来做任何你想做的事情,因为所有的新数据都会被追加到底部。你怎么看?你想这样做吗? – Cooper
无论你认为最简单的修复方法如何,我都可以做到。只要让我知道该怎么做,我会摆脱你的头发。共享文件是一个副本,因此欢迎您采取任何您认为最适合的方式,并且我会按照您在原始文件上的指导。谢谢 –