Submit HTML form’s data to Google Sheet | Sending HTML Form’s data to google sheet

Sometimes, you need to record Html form’s data into Google sheet so that you can use this data later. I am going to explain how can we do this by using HTML form and google sheet.
HTML Form Code


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, minimum-scale=1.0">
    <title>Contact Us</title>
    <link rel="shortcut icon" href="images/index.ico" type="image/x-icon">

    <!-- CSS: Fontawesome -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
    <!-- CSS: Bootstrap v-5.3 -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.4.1/dist/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
   
    
<body> 
             <!-- space -->
                <div class="py-lg-5 py-md-4 py-sm-3 py-2"></div>
                <div class="row justify-content-center pt-5">
                    <div class="col-lg-7 col-md-10">
                        <h3 class="fw-normal text-center mb-5 border-bottom pb-2">Contact with Our Help Team</h3>

                        <form class="form_overlay" method="POST" accept-charset="UTF-8" autocomplete="off" name="contact"> 
                            <div class="row g-4">
                                <div class="col-lg-6">
                                    <div class="input_overlay">
                                        <label for="fname" class="lable">Enter your first name</label>
                                        <input type="text" name="first_name" class="form-control" required autocomplete="off">
                                    </div>
                                </div>
                                <div class="col-lg-6">
                                    <div class="input_overlay">
                                        <label for="lname" class="lable">Enter your last name</label>
                                        <input type="text" name="last_name" class="form-control" required autocomplete="off">
                                    </div>
                                </div>
                                <div class="col-lg-6">
                                    <div class="input_overlay">
                                        <label for="email" class="lable">Enter email address</label>
                                        <input type="text" name="email" class="form-control" required autocomplete="off">
                                    </div>
                                </div>
                                <div class="col-lg-6">
                                    <div class="input_overlay">
                                        <label for="phone" class="lable">Phone number</label>
                                        <input type="text" name="phone" class="form-control" required autocomplete="off">
                                    </div>
                                </div>
                                <div class="col-12">
                                    <div class="input_overlay">
                                        <label for="subject" class="lable">Subject name</label>
                                        <input type="text" name="subject" class="form-control" required autocomplete="off">
                                    </div>
                                </div>
                                <div class="col-12">
                                    <div class="input_overlay textarea">
                                        <label for="desc" class="lable">Description</label>
                                        <textarea name="description" cols="30" rows="4" class="form-control" required autocomplete="off"></textarea>
                                    </div>
                                </div>
                                
                                <div class="col-12 text-end">
                                <button type="submit" class="btn btn-primary mt-3">Submit</button>
                                </div>
                                <p id="demo"></p>
                            </div>
                            
                        </form>
                    </div>
                </div>


    </main>


    

   <script>
            const scriptURL = 'https://script.google.com/macros/s/AKfycbyMVQlyqjWagy6MS0C4ICRW6Be5T647IAR1iClnTLaih6qZce3Hclv4_NvN8uhW2EJZzw/exec'
            const form = document.forms['contact']
           
            form.addEventListener('submit', e => {
              e.preventDefault()
              fetch(scriptURL, { method: 'POST', body: new FormData(form)})
                .then(response => document.getElementById("demo").innerHTML = "<div class='alert alert-primary' role='alert'><b>Thank You for providing the details, We shall get back to you shortly !</b></div>",contact.reset())
                .catch(error => console.error('Error!', error.message))
            })
    </script>

             
 </body>
 </html>

Script for HTML Form

<script>
            const scriptURL = 'https://script.google.com/macros/s/AKfycbyMVQlyqjWagy6MS0C4ICRW6Be5T647IAR1iClnTLaih6qZce3Hclv4_NvN8uhW2EJZzw/exec'
            const form = document.forms['contact']
            
            form.addEventListener('submit', e => {
              e.preventDefault()
              fetch(scriptURL, { method: 'POST', body: new FormData(form)})
                .then(response => document.getElementById("demo").innerHTML = "<div class='alert alert-primary' role='alert'><b>Thank You for providing the details, We shall get back to you shortly !</b></div>",contact.reset())
                .catch(error => console.error('Error!', error.message))
            })
    </script>

Script for Google Sheet

var sheetName = 'contact'
        var scriptProp = PropertiesService.getScriptProperties()
 
        function intialSetup () {
          var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet()
          scriptProp.setProperty('key', activeSpreadsheet.getId())
        }
 
        function doPost (e) {
          var lock = LockService.getScriptLock()
          lock.tryLock(10000)
 
          try {
            var doc = SpreadsheetApp.openById(scriptProp.getProperty('key'))
            var sheet = doc.getSheetByName(sheetName)
 
            var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]
            var nextRow = sheet.getLastRow() + 1
 
            var newRow = headers.map(function(header) {
              return header === 'timestamp' ? new Date() : e.parameter[header]
            })
 
            sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow])
 
            return ContentService
              .createTextOutput(JSON.stringify({ 'result': 'success', 'row': nextRow }))
              .setMimeType(ContentService.MimeType.JSON)
          }
 
          catch (e) {
            return ContentService
              .createTextOutput(JSON.stringify({ 'result': 'error', 'error': e }))
              .setMimeType(ContentService.MimeType.JSON)
          }
 
          finally {
            lock.releaseLock()
          }
        }

Leave a Comment