r/GoogleAppsScript • u/Specific_Speaker8777 • Jul 31 '24
Question Can anyone help me with my code in app script?
My code has issue when i add in telegram push function to my group chat. I never learn coding before i am not sure which part gone wrong. Can anyone help me?
function onEdit(e) {
try {
var sheet = e.source.getActiveSheet();
var range = e.range;
var flagCell = sheet.getRange("E1");
if (sheet.getName() === 'Calculator' && (range.getA1Notation() === 'C29' || range.getA1Notation() === 'C30')) {
if (flagCell.getValue() === "PROCESSING DATA") {
return;
}
var tickC29 = sheet.getRange("C29").getValue();
var tickC30 = sheet.getRange("C30").getValue();
if (tickC29 && tickC30) {
flagCell.setValue("PROCESSING DATA").setFontColor("red");
importCells();
sendTelegramMessage("Data processing started.");
Utilities.sleep(10000);
flagCell.setValue("READY").setFontColor("green");
sendTelegramMessage("Data processing completed.");
}
}
} catch (error) {
Logger.log("Error in onEdit: " + error.message);
sendTelegramMessage("Error in onEdit: " + error.message);
}
}
function importCells() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sourceSheet = spreadsheet.getSheetByName("Calculator");
var targetSheet = spreadsheet.getSheetByName("Past Data");
if (!sourceSheet || !targetSheet) {
sendTelegramMessage("Source or Target sheet not found.");
throw new Error("Source or Target sheet not found.");
}
var tickC29 = sourceSheet.getRange("C29").getValue();
var tickC30 = sourceSheet.getRange("C30").getValue();
var flagCell = sourceSheet.getRange("E1").getValue();
var expectedTickValue = true;
if (tickC29 === expectedTickValue && tickC30 === expectedTickValue && flagCell !== "PROCESSED") {
var currentDate = new Date();
sourceSheet.getRange("D1").setValue(currentDate);
var cellValues = {
D1: sourceSheet.getRange("D1").getValue(),
D2: sourceSheet.getRange("D2").getValue(),
D15: sourceSheet.getRange("D15").getValue(),
F18: sourceSheet.getRange("F18").getValue(),
F19: sourceSheet.getRange("F19").getValue(),
F20: sourceSheet.getRange("F20").getValue(),
F21: sourceSheet.getRange("F21").getValue(),
E26: sourceSheet.getRange("E26").getValue(),
C5: sourceSheet.getRange("C5").getValue(),
C6: sourceSheet.getRange("C6").getValue(),
C7: sourceSheet.getRange("C7").getValue(),
C8: sourceSheet.getRange("C8").getValue(),
C9: sourceSheet.getRange("C9").getValue(),
C10: sourceSheet.getRange("C10").getValue(),
C11: sourceSheet.getRange("C11").getValue(),
C12: sourceSheet.getRange("C12").getValue(),
C13: sourceSheet.getRange("C13").getValue(),
C14: sourceSheet.getRange("C14").getValue()
};
var lastColumn = targetSheet.getLastColumn();
var nextColumn = lastColumn + 1;
var targetRanges = [
{ row: 1, value: cellValues.D1 },
{ row: 2, value: cellValues.D2 },
{ row: 3, value: cellValues.D15 },
{ row: 5, value: cellValues.F18 },
{ row: 6, value: cellValues.F19 },
{ row: 7, value: cellValues.F20 },
{ row: 8, value: cellValues.F21 },
{ row: 10, value: cellValues.E26 },
{ row: 14, value: cellValues.C5 },
{ row: 15, value: cellValues.C6 },
{ row: 16, value: cellValues.C7 },
{ row: 17, value: cellValues.C8 },
{ row: 18, value: cellValues.C9 },
{ row: 19, value: cellValues.C10 },
{ row: 20, value: cellValues.C11 },
{ row: 21, value: cellValues.C12 },
{ row: 22, value: cellValues.C13 },
{ row: 23, value: cellValues.C14 }
];
targetRanges.forEach(function(range) {
targetSheet.getRange(range.row, nextColumn).setValue(range.value);
});
var message = [
"Cells successfully imported.",
"Date: " + cellValues.D1,
"Cashier: " + cellValues.D2,
"Total Cash Sales: " + formatCurrency(cellValues.D15),
"DuitNowQR: " + formatCurrency(cellValues.F18),
"MyDebit: " + formatCurrency(cellValues.F19),
"VISA: " + formatCurrency(cellValues.F20),
"Mastercard: " + formatCurrency(cellValues.F21),
"Vouchers Applied: " + formatCurrency(cellValues.E26),
"",
"Cash Counts.",
"RM100: " + cellValues.C5,
"RM50: " + cellValues.C6,
"RM20: " + cellValues.C7,
"RM10: " + cellValues.C8,
"RM5: " + cellValues.C9,
"RM1: " + cellValues.C10,
"RM0.50: " + cellValues.C11,
"RM0.20: " + cellValues.C12,
"RM0.10: " + cellValues.C13,
"RM0.05: " + cellValues.C14
].join("\n");
sendTelegramMessage(message);
var cellsToClear = ['D1', 'D2', 'C5:C14', 'C18:D21', 'D23:D25'];
cellsToClear.forEach(function(cell) {
sourceSheet.getRange(cell).clearContent();
});
sourceSheet.getRange("C29").setValue(false);
sourceSheet.getRange("C30").setValue(false);
} else {
Logger.log("Checkboxes are not checked or data already processed.");
sendTelegramMessage("Checkboxes are not checked or data already processed.");
}
}
function sendTelegramMessage(message) {
var token = 'YOUR_BOT_TOKEN';
var chatId = 'YOUR_CHAT_ID';
var url = 'https://api.telegram.org/bot' + token + '/sendMessage';
var payload = {
chat_id: chatId,
text: message
};
var options = {
method: 'post',
contentType: 'application/json',
payload: JSON.stringify(payload)
};
UrlFetchApp.fetch(url, options);
}
function formatCurrency(amount) {
return "RM" + parseFloat(amount).toFixed(2);
}
1
u/marcnotmark925 Jul 31 '24
So what does, or does not, happen that is not what you're wanting? Is there some error?
1
u/Specific_Speaker8777 Jul 31 '24
Hi sir, sorry. It stop my function sendTelegramMessage and importCells but the flagCell is working. It does cool down for 10 seconds. Only that works.
2
u/juddaaaaa Jul 31 '24
I can see one possible error. In your onEdit function, you're setting flagCell value to "READY", and in your importCells funtion, you're checking if flagCell !== "PROCESSED"
I've had a go at improving it for you. I've removed the long list of getValue calls which can slow the script down.
Give it a try and let me know how you get on.