首页 > 解决方案 > 有没有办法将表单中的所有字段收集到二维数组中以写入 Google 表格?

问题描述

目标:我希望使用 Google App Scripts 创建一个自定义表单,以将具有不同行数的数据提交到 Google Sheet。本质上,将有一些基本字段,但随后有一个表结构,用户将能够按下按钮将另一行添加到表的末尾。一旦他们提交表格,结果将被附加到 Google 表格中。

到目前为止,我已经创建了表单,它允许您再添加 2 个包含字段的 div。我不想手动将每个字段映射到一个数组中以将其发送给 Google,所以我正在寻找最干净的方法。我试图一次提取所有表单字段,并考虑按类提取它们。我有它,二维数组将写入表格,但我在获取数据时遇到问题。

'''html
<form id="soulTestForm">

<div class="block">
 <div>
 <label for="name1">Name</label>
 <input type="text" name="name1" id="name1" placeholder="A Fancy Name">
 </div>

<div>
    <label for="count1">Count</label>    
    <input type="number" name="count1" id="count1" placeholder="100">
</div>
</div>
<div class="block">
 <div>
 <label for="name2">Name</label>
 <input type="text" name="name2" id="name2" placeholder="A Fancy Name">
 </div>

<div>
    <label for="count2">Count</label>    
    <input type="number" name="count2" id="count2" placeholder="100">
</div>
</div>
  <button type="button" name="addSection" id="addSection" value="Add an Entry" onclick="addBlock();" >Add a Section</button>
 <input type="submit" onclick="this.value='Magic ...'; google.script.run.withSuccessHandler(formSubmitted) .writeForm(this.parentNode); return false;">
</form>
<script>
function addBlock() {
  var block = document.getElementsByClassName('soulBlocks');
  var i;
  for (i = 0; i < block.length; i++){
    console.log("i=" + i);
    if (block[i].style.display=="none"){
      console.log("block if");
      block[i].style.display="block";
      if (i == block.length-1) {
        document.getElementById("addSection").style.visibility="hidden";
        }
      break;
    }      
  } 
}
</script>


'''Code.gs file
function writeForm(form) {
var fields = [
 [form.name1, form.count1],
 [form.name2, form.count2]
 ]; 
}

标签: multidimensional-arraygoogle-apps-scriptgoogle-sheets

解决方案


流动:

  • form使用数组获取对象的所有键Object.keys
  • 使用将键数组分成两组Array.reduce

片段:

function writeForm(form) {
  var tempArr,val;
  var arr2d = Object.keys(form).reduce(function(acc,curr,i){
    val = form[curr];
    i % 2 === 0 ? (tempArr= [val]) : (tempArr.push(val), acc.push(tempArr));
    return acc;
  },[]);
  return arr2d;
}
console.log(writeForm({"name1":"Cat","count1":"100","name2":"Mouse","count2":"99"}))


推荐阅读