It seems like you want to create a Google Apps Script web application that receives HTTP GET requests and saves data into a Google Sheets spreadsheet. However, I noticed a couple of issues in your code snippet. Here's the corrected version:
All Method Delete, Update, Insert Get, Image Save Image in binary sent to save, multiple Update Data,Image and Data Update,:
Image Show Web Browser:
Copy following code:
var spreadsheet = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/12i01zB-RCWyB2FpOxJDB3W4NPFi8OaIg/edit#gid=0"); var sheet = spreadsheet.getSheetByName("Sheet1"); function doGet(e) { var action = e.parameter.action; if (action == "create") { // Use '==' for comparison, not '=' return createData(e); } if (action == "get") { // Use '==' for comparison, not '=' return getData(e); } if (action == "update") { // Use '==' for comparison, not '=' return updateData(e); } if (action == "delete") { // Use '==' for comparison, not '=' return deleteData(e); } if (action == "multipleRow") { // Use '==' for comparison, not '=' return deleteMultipleRows(e); } if (action == "deleteAllData") { // Use '==' for comparison, not '=' return deleteAllData(e); } if (action == "updateMultipleRows") { // Use '==' for comparison, not '=' return updateMultipleRows(e); } } function createData(e) { var id= "M_ID"+sheet.getLastRow(); var M_Name = e.parameter.name; var M_City = e.parameter.city; var M_Start_Date = e.parameter.start; var M_Start_End = e.parameter.end; var M_duration = e.parameter.duratio; var M_Fee = e.parameter.fee; var M_phone = e.parameter.phone; sheet.appendRow([id,M_Name, M_City, M_Start_Date,M_Start_End,M_duration,M_Fee,M_phone]); return ContentService.createTextOutput("Created").setMimeType(ContentService.MimeType.TEXT); } |
Copy following code:
function getData() { var records = {}; var data = []; var rows = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues(); for (var i = 0; i < rows.length; i++) { var row = rows[i]; var record = { "id": row[0], "name": row[1], "city": row[2], "startdate": row[3], "enddate": row[4], "duration": row[5], "fee": row[6], "phone": row[7] }; data.push(record); } records.items = data; var result = JSON.stringify(records); return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON); } |
Copy following code:
function updateData(e) { var id =e.parameter.id; // Are you sure you want to generate a new ID? var M_Name = e.parameter.name; var M_City = e.parameter.city; var M_Start_Date = e.parameter.start; var M_End_Date = e.parameter.end; // Fixed the variable name var M_duration = e.parameter.duration; // Fixed the variable name var M_Fee = e.parameter.fee; var M_phone = e.parameter.phone; var flag = 0; // Changed 'Flag' to 'flag' var staid; for (var i = 1; i <= sheet.getLastRow(); i++) { // Start from row 2 staid = sheet.getRange(i, 1).getValue(); // Get ID from the current row if (id === staid) { // Changed '==' to '===' for strict comparison flag = 1; sheet.getRange(i, 2).setValue(M_Name); sheet.getRange(i, 3).setValue(M_City); sheet.getRange(i, 4).setValue(M_Start_Date); sheet.getRange(i, 5).setValue(M_End_Date); sheet.getRange(i, 6).setValue(M_duration); sheet.getRange(i, 7).setValue(M_Fee); sheet.getRange(i, 8).setValue(M_phone); break; // No need to continue once the update is done } } var result = (flag === 1) ? "Updated" : "Not Updated"+staid+":"+id+":"+flag; // Use ternary operator return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.TEXT); } |
Copy following code post method and image send binary:
if (action === "save") { var folder = DriveApp.createFolder("ImageFolder"); var blob = e.postData; // Assuming e.postData is the file blob var fileName = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyyMMddHHmmss") + ".jpg"; // Generate a unique filename var imageFile = folder.createFile(blob); // Make the file publicly accessible imageFile.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW); var fileUrl = imageFile.getUrl(); return ContentService.createTextOutput(fileUrl); } |
Copy following code:
function doPost(e) { var dataArray = JSON.parse(e.postData.contents); var result = []; for (var i = 0; i < dataArray.length; i++) { var data = dataArray[i]; var row = [ "M_ID" + (sheet.getLastRow()), // Assuming you want to generate a new ID data.name, data.city, data.startdate, data.enddate, data.duration, data.fee, data.phone ]; sheet.appendRow(row); result.push("Row " + (sheet.getLastRow()) + " added"); // Include row numbers in result } return ContentService.createTextOutput(JSON.stringify(result)).setMimeType(ContentService.MimeType.JSON); } function deleteMultipleRows(e) { var idArray = JSON.parse(e.parameter.ids); // Assuming the parameter name is "ids" var result = []; for (var i = sheet.getLastRow(); i >= 2; i--) { var staid = sheet.getRange(i, 1).getValue(); // Get ID from the current row if (idArray.includes(staid)) { sheet.deleteRow(i); result.push("Deleted row with ID " + staid); } } if (result.length === 0) { result.push("No rows deleted"); } return ContentService.createTextOutput(JSON.stringify(result)).setMimeType(ContentService.MimeType.JSON); } |
Copy following code:
function deleteAllData() { sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).clearContent(); return ContentService.createTextOutput("All data deleted").setMimeType(ContentService.MimeType.TEXT); } |
Copy following code:
function updateMultipleRows(e) { var dataArray = JSON.parse(e.parameter.data); // Assuming the parameter name is "data" var result = []; for (var i = 0; i < dataArray.length; i++) { var data = dataArray[i]; var idToUpdate = data.id; for (var j = 2; j <= sheet.getLastRow(); j++) { var staid = sheet.getRange(j, 1).getValue(); // Get ID from the current row if (idToUpdate === staid) { sheet.getRange(j, 2).setValue(data.name); sheet.getRange(j, 3).setValue(data.city); sheet.getRange(j, 4).setValue(data.startdate); sheet.getRange(j, 5).setValue(data.enddate); sheet.getRange(j, 6).setValue(data.duration); sheet.getRange(j, 7).setValue(data.fee); sheet.getRange(j, 8).setValue(data.phone); result.push("Updated row with ID " + idToUpdate); break; // No need to continue once the update is done } } } if (result.length === 0) { result.push("No rows updated"); } return ContentService.createTextOutput(JSON.stringify(result)).setMimeType(ContentService.MimeType.JSON); } |
All update , delete remaining days daily Method
var spreadsheet = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1sbaCN8sWYUEe-iQsdgJirOfTce_XnXPrRb9JWcXzCF4/edit#gid=0"); var sheet = spreadsheet.getSheetByName("Sheet1"); function doGet(e) { var action = e.parameter.action; // var action ="getImage"; if (action == "create") { // Use '==' for comparison, not '=' return createData(e); } if (action == "get") { // Use '==' for comparison, not '=' return getData(e); } if (action == "delete") { // Use '==' for comparison, not '=' return deleteData(e); } if (action == "multipleRow") { // Use '==' for comparison, not '=' return deleteMultipleRows(e); } if (action == "deleteAllData") { // Use '==' for comparison, not '=' return deleteAllData(e); } if (action == "updateMultipleRows") { // Use '==' for comparison, not '=' return updateMultipleRows(e); } if (action === "getImage") { var imageId = e.parameter.ImageId; var htmlTemp = HtmlService.createTemplateFromFile('index'); htmlTemp.data = imageBase(imageId); var htmlOutput = htmlTemp.evaluate(); return htmlOutput; } if (action == "deleteImage") { // Use '==' for comparison, not '=' return deleteImage(e.parameter.id); } } // // ----------------start date Remaindays daily base---------------------------- // You can trigger the updateRemainingDays function as needed. For example, if you want to run it daily, use the following code: function scheduleDailyUpdate() { var triggerDay = new Date(); triggerDay.setHours(0, 0, 0, 0); // Set to midnight triggerDay.setDate(triggerDay.getDate() + 1); // Next day ScriptApp.newTrigger("updateRemainingDays") .timeBased() .at(triggerDay) .create(); } function calculateRemainingDays(endDateStr) { var today = new Date(); var end = new Date(endDateStr); var timeDifference = end - today; var daysDifference = Math.ceil(timeDifference / (1000 * 3600 * 24)); return daysDifference; } function updateRemainingDays() { var rows = sheet.getDataRange().getValues(); for (var i = 1; i < rows.length; i++) { var endDateStr = rows[i][4]; // Assuming "enddate" is in the fifth column (index 4) if (endDateStr) { var remainingDays = calculateRemainingDays(endDateStr); // Logger.log("End Date: " + endDateStr); // Logger.log("Remaining Days: " + remainingDays); sheet.getRange(i + 1, 10).setValue(remainingDays); // Assuming the "remaining days" column is in the tenth column (index 9) } } var sheetarrange = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var lastRow = sheetarrange.getLastRow(); var dataRange = sheetarrange.getRange(2, 1, lastRow - 1, sheetarrange.getLastColumn()); // Assuming data starts from row 2 dataRange.sort({ column: 10, ascending: true }); } // ----------------end date ---------------------------- function createDataOrPic(e) { var id= "M_ID"+sheet.getLastRow(); var M_Name = e.parameter.name; var M_City = e.parameter.city; var M_Start_Date = e.parameter.start; var M_Start_End = e.parameter.end; var M_duration = e.parameter.duratio; var M_Fee = e.parameter.fee; var M_phone = e.parameter.phone; var blob = e.postData; if(blob!=null){ var folder = ensureFolderExists("API_image"); // Assuming e.postData is the file blob var fileName = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyyMMddHHmmss"); // Generate a unique filename var imageFile = folder.createFile(blob).setName(fileName); // Make the file publicly accessible // imageFile.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW); var file_ID = imageFile.getId(); sheet.appendRow([id,M_Name, M_City, M_Start_Date,M_Start_End,M_duration,M_Fee,M_phone,file_ID]); }else{ sheet.appendRow([id,M_Name, M_City, M_Start_Date,M_Start_End,M_duration,M_Fee,M_phone]); } return ContentService.createTextOutput("Created").setMimeType(ContentService.MimeType.TEXT); } function deleteImage(fileId) { try { var file = DriveApp.getFileById(fileId); file.setTrashed(true); return "Image deleted successfully."; } catch (error) { return "Error deleting image: " + error; } } function imageBase(id){ //https://drive.google.com/open?id=117pOY8Ogf0McnzxHxKiAw8VVPFBm9OKC // var id = "13wI_Cmv0K7qXeMzHuKIN7jD7p8Ebl066"; var img = DriveApp.getFileById(id); var blob = img.getBlob(); var bytes = blob.getBytes(); var base64Str = Utilities.base64Encode(bytes); var imgHTML = "data:image/png;base64,"+base64Str; return imgHTML; } function createData(e) { var id= "M_ID"+sheet.getLastRow(); var M_Name = e.parameter.name; var M_City = e.parameter.city; var M_Start_Date = e.parameter.start; var M_Start_End = e.parameter.end; var M_duration = e.parameter.duratio; var M_Fee = e.parameter.fee; var M_phone = e.parameter.phone; sheet.appendRow([id,M_Name, M_City, M_Start_Date,M_Start_End,M_duration,M_Fee,M_phone]); return ContentService.createTextOutput("Created").setMimeType(ContentService.MimeType.TEXT); } function getData() { var records = {}; var data = []; var rows = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues(); for (var i = 0; i < rows.length; i++) { var row = rows[i]; var record = { "id": row[0], "name": row[1], "city": row[2], "startdate": row[3], "enddate": row[4], "duration": row[5], "fee": row[6], "phone": row[7], "ImageID": row[8] }; data.push(record); } records.items = data; var result = JSON.stringify(records); return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON); } function doPost(e) { var action = e.parameter.action; if (action == "saveImalgeAndUr") { // Use '==' for comparison, not '=' var requestData = JSON.parse(e.postData.contents); // Parse the JSON data from the request var imageUrl = requestData.imageUrl; var imageName = requestData.imageName; return saveImageAndUrl(imageUrl, imageName); } if (action == "createOrPic") { // Use '==' for comparison, not '=' return createDataOrPic(e); } if (action == "updateDataOrImage") { // Use '==' for comparison, not '=' return updateDataOrImage(e); } if (action === "saveImagebinary") { var folder = ensureFolderExists("API_image"); var blob = e.postData; // Assuming e.postData is the file blob var fileName = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyyMMddHHmmss"); // Generate a unique filename var imageFile = folder.createFile(blob).setName(fileName); // Make the file publicly accessible // imageFile.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW); // var fileUrl = imageFile.getUrl(); var htmlTemp = HtmlService.createTemplateFromFile('index'); htmlTemp.data = imageBase(imageFile.getId()); var htmlOutput = htmlTemp.evaluate(); return htmlOutput; // var fileUrl = imageFile.getUrl(); // return ContentService.createTextOutput(fileUrl); } if (action == "AddMultipleRow") { // Use '==' for comparison, not '=' return AddMultipleRow(e); } } function AddMultipleRow(e){ var dataArray = JSON.parse(e.postData.contents); var result = []; for (var i = 0; i < dataArray.length; i++) { var data = dataArray[i]; var row = [ "M_ID" + (sheet.getLastRow()), // Assuming you want to generate a new ID data.name, data.city, data.startdate, data.enddate, data.duration, data.fee, data.phone ]; sheet.appendRow(row); result.push("Row " + (sheet.getLastRow()) + " added"); // Include row numbers in result } return ContentService.createTextOutput(JSON.stringify(result)).setMimeType(ContentService.MimeType.JSON); } function ensureFolderExists(folderName) { var rootFolder = DriveApp.getRootFolder(); var folders = rootFolder.getFoldersByName(folderName); if (folders.hasNext()) { return folders.next(); } else { return rootFolder.createFolder(folderName); } } function updateDataOrImage(e) { var id =e.parameter.id; // Are you sure you want to generate a new ID? var M_Name = e.parameter.name; var M_City = e.parameter.city; var M_Start_Date = e.parameter.start; var M_End_Date = e.parameter.end; // Fixed the variable name var M_duration = e.parameter.duration; // Fixed the variable name var M_Fee = e.parameter.fee; var M_phone = e.parameter.phone; var M_ImageBinary = e.postData; if(M_ImageBinary!=null){ var folder = ensureFolderExists("API_image"); var blob = e.postData; // Assuming e.postData is the file blob var fileName = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyyMMddHHmmss"); // Generate a unique filename var imageFile = folder.createFile(blob).setName(fileName); // Make the file publicly accessible // imageFile.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW); var file_ID = imageFile.getId(); var flag = 0; // Changed 'Flag' to 'flag' var staid; for (var i = 1; i <= sheet.getLastRow(); i++) { // Start from row 2 staid = sheet.getRange(i, 1).getValue(); // Get ID from the current row if (id === staid) { // Changed '==' to '===' for strict comparison flag = 1; sheet.getRange(i, 2).setValue(M_Name); sheet.getRange(i, 3).setValue(M_City); sheet.getRange(i, 4).setValue(M_Start_Date); sheet.getRange(i, 5).setValue(M_End_Date); sheet.getRange(i, 6).setValue(M_duration); sheet.getRange(i, 7).setValue(M_Fee); sheet.getRange(i, 8).setValue(M_phone); sheet.getRange(i, 9).setValue(file_ID); break; // No need to continue once the update is done } } var result = (flag === 1) ? "Updated" : "Not Updated"+staid+":"+id+":"+flag; // Use ternary operator }else{ var flag = 0; // Changed 'Flag' to 'flag' var staid; for (var i = 1; i <= sheet.getLastRow(); i++) { // Start from row 2 staid = sheet.getRange(i, 1).getValue(); // Get ID from the current row if (id === staid) { // Changed '==' to '===' for strict comparison flag = 1; sheet.getRange(i, 2).setValue(M_Name); sheet.getRange(i, 3).setValue(M_City); sheet.getRange(i, 4).setValue(M_Start_Date); sheet.getRange(i, 5).setValue(M_End_Date); sheet.getRange(i, 6).setValue(M_duration); sheet.getRange(i, 7).setValue(M_Fee); sheet.getRange(i, 8).setValue(M_phone); break; // No need to continue once the update is done } } var result = (flag === 1) ? "Updated" : "Not Updated"+staid+":"+id+":"+flag; // Use ternary operator } return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.TEXT); } function deleteData(e) { var idToDelete = e.parameter.id; var flag = false; for (var i = 1; i <= sheet.getLastRow(); i++) { // Start from row 2 var staid = sheet.getRange(i, 1).getValue(); // Get ID from the current row if (idToDelete === staid) { sheet.deleteRow(i); flag = true; break; // No need to continue once the deletion is done } } var result = flag ? "Deleted" : "ID not found"; // Set result message based on flag return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.TEXT); } function deleteMultipleRows(e) { var idArray = JSON.parse(e.parameter.ids); // Assuming the parameter name is "ids" var result = []; for (var i = sheet.getLastRow(); i >= 2; i--) { var staid = sheet.getRange(i, 1).getValue(); // Get ID from the current row if (idArray.includes(staid)) { sheet.deleteRow(i); result.push("Deleted row with ID " + staid); } } if (result.length === 0) { result.push("No rows deleted"); } return ContentService.createTextOutput(JSON.stringify(result)).setMimeType(ContentService.MimeType.JSON); } function deleteAllData() { sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).clearContent(); return ContentService.createTextOutput("All data deleted").setMimeType(ContentService.MimeType.TEXT); } function updateMultipleRows(e) { var dataArray = JSON.parse(e.parameter.data); // Assuming the parameter name is "data" var result = []; for (var i = 0; i < dataArray.length; i++) { var data = dataArray[i]; var idToUpdate = data.id; for (var j = 2; j <= sheet.getLastRow(); j++) { var staid = sheet.getRange(j, 1).getValue(); // Get ID from the current row if (idToUpdate === staid) { sheet.getRange(j, 2).setValue(data.name); sheet.getRange(j, 3).setValue(data.city); sheet.getRange(j, 4).setValue(data.startdate); sheet.getRange(j, 5).setValue(data.enddate); sheet.getRange(j, 6).setValue(data.duration); sheet.getRange(j, 7).setValue(data.fee); sheet.getRange(j, 8).setValue(data.phone); result.push("Updated row with ID " + idToUpdate); break; // No need to continue once the update is done } } } if (result.length === 0) { result.push("No rows updated"); } return ContentService.createTextOutput(JSON.stringify(result)).setMimeType(ContentService.MimeType.JSON); } function uploadImageToDrive(imageData, imageName) { var folder = DriveApp.createFolder("ImageFolder"); // Create a folder in Google Drive var imageBlob = Utilities.newBlob(imageData, "image/jpeg", imageName); var imageFile = folder.createFile(imageBlob); // Upload the image to the folder var imageUrl = imageFile.getUrl(); // Get the URL of the uploaded image return imageUrl; } function saveImageUrlToSheet(imageUrl) { var lastRow = spreadsheet.getLastRow(); sheet.appendRow([imageUrl]) // spreadsheet.getRange(lastRow + 1, 1).setValue(imageUrl); // Assuming URL is saved in the first column } function saveImageAndUrl(imageData, imageName) { var imageUrl = uploadImageToDrive(imageData, imageName); saveImageUrlToSheet(imageUrl); return ContentService.createTextOutput("Image uploaded and URL saved").setMimeType(ContentService.MimeType.TEXT); } |
To get the time when a specific trigger is scheduled to run in Google Apps Script, you can use the getTrigger method to retrieve the trigger's information, including its next run time. Here's how you can do it: calling 2 mint after
function createNewTrigger() { let trigger = ScriptApp.newTrigger('createNewTrigger') .timeBased() .after(2 * 60 * 1000) // 2 minutes in milliseconds .create(); // logCurrentTime(); v=trigger.getUniqueId(); // Logger.log("Current Time: " + trigger.getUniqueId()); deleteTrigger(); } let v; // Initial trigger to start the process function startTrigger() { createNewTrigger(); } function logCurrentTime() { var currentTime = new Date(); // Get the current date and time Logger.log("Current Time: " + currentTime); } function deleteTrigger() { var triggers = ScriptApp.getProjectTriggers(); for (var i = 0; i < triggers.length; i++) { // Logger.log("Current : " + triggers[i].getUniqueId()); if (triggers[i].getUniqueId() === v) { // Logger.log("Current equal: " + v); // break; // Stop after deleting the trigger }else{ ScriptApp.deleteTrigger(triggers[i]); } } } |
To send an email in Google Apps Script, you can use the MailApp service. Here's a basic example of how to create a function to send an email:
function sendEmail() { var recipient = "example@gmail.com"; // Replace with the recipient's email address var subject = "Your subject here"; var message = "testing"; // Send the email MailApp.sendEmail(recipient, subject, message); Logger.log("Email sent to " + recipient); } |
Calling delete Method:
https://script.google.com/macros/s/AKfycbyqeguNdZrpz747QZbMg3bZVNbi7uBlQtlO5vrCaRXjTdm6yCyi1iyRr7PX-ZmjGfeong/exec?action=delete&id=M_ID3 |
Calling Get Method:
https://script.google.com/macros/s/AKfycbzuMikX8zEAJr-klMV-L2oWkeqEwGHInMAC5GCVQNqBti6AunP4N3q7OJbFY3ztYrKI/exec?action=get |
Calling Update Method:
https://script.google.com/macros/s/AKfycbyqeguNdZrpz747QZbMg3bZVNbi7uBlQtlO5vrCaRXjTdm6yCyi1iyRr7PX-ZmjGfeong/exec?action=update&name=ali&city=layyah&start=2&end=3&duration=2month&fee=300&phone=32&id=M_ID3 |
Calling updateMultipleRows Method:
https://script.google.com/macros/s/AKfycbwpfupabXSWJJ2ykmBQv9Y5JJgLp8tHnYpAZdBBuaL-NWouLsAIGujsiHmcSkQqTzqZ6g/exec?action=updateMultipleRows&data=[{"id":"M_ID1", "name": "John","city": "New York","startdate": "2023-08-13","enddate": "2023-08-20","duration": "7 days","fee": 100,"phone": "123-456-7890"}] |
Calling updateMultipleRows Method:
https://script.google.com/macros/s/AKfycbwpfupabXSWJJ2ykmBQv9Y5JJgLp8tHnYpAZdBBuaL-NWouLsAIGujsiHmcSkQqTzqZ6g/exec?action=updateMultipleRows&data=[{"id":"M_ID1", "name": "John","city": "New York","startdate": "2023-08-13","enddate": "2023-08-20","duration": "7 days","fee": 100,"phone": "123-456-7890"}] |