我一直在寻找并寻找一些指导,虽然不仅在这里讨论了各种主题,而且在其他论坛上讨论过,我开始认为我对Google表格的要求过高。
我在一个警察部门工作,我的任务是通过使用Google表单创建一个几乎防弹的方式来记录日程安排,因此与他们去的电子表格进行的交互很少。我的问题是使用表格的主管将使用1表格提交填写每日班次的班次名单。我想做的是然后在表格上提交1表格,通过指定的区域进行分解并垂直放置,以便我可以通过日历制作者运行。
对于我的生活,我似乎无法找到任何帮助(可能我的搜索字符串在我看的时候是错误的)如何获取列并将其按照我需要的方式堆叠在电子表格中。< / p>
以下是电子表格 - Shift Roster
非常感谢任何帮助!
答案 0 :(得分:2)
使用电子表格公式重新塑造现有数据似乎很困难;一个人可能会得到像这样的东西
={
transpose(split(rept(FormSubmissions!A2&"|", 12), "|")),
transpose(split(rept(FormSubmissions!B2&"|", 12), "|")),
transpose(FormSubmissions!C1:N1),
transpose(FormSubmissions!C2:N2);
transpose(split(rept(FormSubmissions!A3&"|", 12), "|")),
transpose(split(rept(FormSubmissions!B3&"|", 12), "|")),
transpose(FormSubmissions!C1:N1),
transpose(FormSubmissions!C3:N3);
transpose(split(rept(FormSubmissions!A4&"|", 12), "|")),
transpose(split(rept(FormSubmissions!B4&"|", 12), "|")),
transpose(FormSubmissions!C1:N1),
transpose(FormSubmissions!C4:N4)
}
其中公式必须根据FormSubmissions中的行数进行扩展(上面介绍了第2,3,4行)。数字12是条目C-N的数量,因此它最终在公式中被硬编码。不是一个很好的选择。
从表单中获取数据时,重新整形数据会更容易,脚本设置为在表单提交时运行(请参阅:triggers)。这是一个可以使用的脚本:
function reshapeData(e) {
var sheet = e.range.getSheet();
var headers = sheet.getRange('1:1').getValues()[0];
var output = [];
for (var k = 2; k < e.values.length; k++) {
output.push([e.values[0], e.values[1], headers[k], e.values[k]]);
}
var destination = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('FormatForCalendar');
var row = destination.getLastRow();
destination.insertRowsAfter(row, output.length);
destination.getRange(row, 1, output.length, output[0].length).setValues(output);
}
该脚本从提交表中获取列标题,但直接从表单中获取值。然后将它们以指定的格式放入FormatForCalendar表(底部):timestamp,shift,其余信息。
这种方法的缺点是它不支持编辑提交。此外,一旦我们在脚本领域,可能更容易调整&#34;日历制造商&#34;处理来自此表单的形状中的数据。