Search code examples
javascriptgoogle-apps-scriptgoogle-docsgoogle-forms

Append a New Table Row (1 Row 2 Columns) on Google Apps Script


I'm trying to make an automation script that updates an existing Google Docs based on user responses from Google Form. so there are 3 questions (Name, University Number Identification or NIM in Bahasa, and Department or bidang), the department question used for categorizing each respondent.

So the goal is whenever a form is submitted, then the Docs is updated too. So I want to make the update make a new row with a cell that contains a template string that I already used in my script on the spreadsheets. But the problem is it only appends a single column for each row, however, that's not what I intended to have happened. I want it to update 1 row and 2 columns.

Screenshot Of the Google Form

Screenshot of the Google Docs Error

Screenshot of what I intended the Google Docs when it's updated to be

function appendTable(variabel){
      var rangePSDI = body.findText(variabel);
      var searchElement = body.findElement(DocumentApp.ElementType.TABLE, rangePSDI);
      element = searchElement.getElement();
      table = element.asTable();
      table.appendTableRow().appendTableCell(variabel);
  }

  if (bidang == 'PSDI') {
      body.replaceText('{{NamaPSDI}}', nama);
      body.replaceText('{{NIMPSDI}}', nim);
      appendTable("{{NamaPSDI}}");
      appendTable("{{NIMPSDI}}");
      return;
  } else if (bidang == 'PSDM') {
      body.replaceText('{{NamaPSDM}}', nama);
      body.replaceText('{{NIMPSDM}}', nim);
      appendTable("{{NamaPSDM}}");
      appendTable("{{NIMPSDM}}");
      return;
  }

Solution

  • Think of the appendTableRow as <tr> in HTML where you have to set the cell using <td>or appendTableCell.

    See Table Row element in HTML.

    Try this:

    Code:

    function appendTable(){
      var doc = DocumentApp.openById('someid');
      var body = doc.getBody();
      var tables = body.getTables();
      var text = "PSDM";
      tables.forEach(table => {
        if(table.getCell(0,0).getText() == text){
          table.replaceText("{{Nama"+text+"}}", "test nama"+text)
          table.replaceText("{{NIM"+text+"}}", "test NIM"+text)
          var tr = table.appendTableRow();
          tr.appendTableCell("{{Nama"+text+"}}");
          tr.appendTableCell("{{NIM"+text+"}}");
        }
      })
    }
    

    Before:

    enter image description here

    After:

    PSDI

    enter image description here

    PSDM enter image description here