Advertisement
Guest User

App Script

a guest
Aug 28th, 2023
493
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.67 KB | None | 0 0
  1. function onOpen() {
  2. var ui = SpreadsheetApp.getUi();
  3.  
  4. ui.createMenu('Trigger Automations')
  5. .addItem('Send All Rows', 'sendAllRowsToWebhook')
  6. .addItem('Send Selected Rows', 'showRowSelectionDialog')
  7. .addToUi();
  8. }
  9.  
  10. function showRowSelectionDialog() {
  11. var ui = SpreadsheetApp.getUi();
  12. var response = ui.prompt('Send Selected Rows to Webhook', 'Enter row numbers or a range (e.g., 2-5):', ui.ButtonSet.OK_CANCEL);
  13.  
  14. if (response.getSelectedButton() === ui.Button.OK) {
  15. var userInput = response.getResponseText();
  16. sendSelectedRowsToWebhook(userInput);
  17. }
  18. }
  19.  
  20. function sendSelectedRowsToWebhook(userInput) {
  21. var webhookUrl = 'AUTOMATIONS_WEBHOOK_URL';
  22.  
  23. var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  24. var sheet = spreadsheet.getActiveSheet();
  25. var dataRange = sheet.getDataRange();
  26. var data = dataRange.getValues();
  27. var headers = data[0];
  28.  
  29. // Parse the user input to determine which rows to send
  30. var selectedRows = parseUserInput(userInput, data.length);
  31.  
  32. if (selectedRows.length === 0) {
  33. SpreadsheetApp.getUi().alert('No valid rows selected. Please enter a valid range or row numbers.');
  34. return;
  35. }
  36.  
  37. for (var i = 0; i < selectedRows.length; i++) {
  38. var rowIndex = selectedRows[i] - 1; // Adjust for 0-based indexing
  39. var rowData = data[rowIndex];
  40.  
  41. var jsonData = {};
  42.  
  43. for (var j = 0; j < headers.length; j++) {
  44. jsonData[headers[j]] = rowData[j];
  45. }
  46.  
  47. var jsonString = JSON.stringify(jsonData);
  48.  
  49. var options = {
  50. 'method': 'post',
  51. 'contentType': 'application/json',
  52. 'payload': jsonString
  53. };
  54.  
  55. var response = UrlFetchApp.fetch(webhookUrl, options);
  56.  
  57. Logger.log(response.getContentText());
  58.  
  59. // Pause briefly to avoid rate limiting (adjust as needed)
  60. Utilities.sleep(1000); // 1 seconds
  61. }
  62. }
  63.  
  64. function parseUserInput(userInput, maxRows) {
  65. var selectedRows = [];
  66.  
  67. // Split user input by commas
  68. var inputParts = userInput.split(',');
  69.  
  70. for (var i = 0; i < inputParts.length; i++) {
  71. var part = inputParts[i].trim();
  72.  
  73. if (part.indexOf('-') !== -1) {
  74. // Handle ranges (e.g., 2-5)
  75. var rangeParts = part.split('-');
  76.  
  77. if (rangeParts.length === 2) {
  78. var start = parseInt(rangeParts[0]);
  79. var end = parseInt(rangeParts[1]);
  80.  
  81. for (var j = start; j <= end && j <= maxRows; j++) {
  82. selectedRows.push(j);
  83. }
  84. }
  85. } else {
  86. // Handle individual row numbers
  87. var rowNumber = parseInt(part);
  88.  
  89. if (!isNaN(rowNumber) && rowNumber >= 1 && rowNumber <= maxRows) {
  90. selectedRows.push(rowNumber);
  91. }
  92. }
  93. }
  94.  
  95. return selectedRows;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement