Google表单对表格转置问题的回应

时间:2017-01-08 22:40:19

标签: google-sheets google-form

我一直在寻找并寻找一些指导,虽然不仅在这里讨论了各种主题,而且在其他论坛上讨论过,我开始认为我对Google表格的要求过高。

我在一个警察部门工作,我的任务是通过使用Google表单创建一个几乎防弹的方式来记录日程安排,因此与他们去的电子表格进行的交互很少。我的问题是使用表格的主管将使用1表格提交填写每日班次的班次名单。我想做的是然后在表格上提交1表格,通过指定的区域进行分解并垂直放置,以便我可以通过日历制作者运行。

对于我的生活,我似乎无法找到任何帮助(可能我的搜索字符串在我看的时候是错误的)如何获取列并将其按照我需要的方式堆叠在电子表格中。< / p>

以下是电子表格 - Shift Roster

非常感谢任何帮助!

1 个答案:

答案 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;处理来自此表单的形状中的数据。