USEFUL GAS FUNCTIONS FOR GOOGLE SPREADSHEETS
Reference: https://developers.google.com/apps-script/F1 - Add functions into menu
function onOpen() { var ui = SpreadsheetApp.getUi(); ui.createMenu('RTA') .addItem('Run All', 'runAll') .addItem('Import Data', 'importCSVFromWeb') .addItem('Split Data', 'copyToLIST') .addItem('Order Sheets by Straid', 'orderSheet') .addToUi(); }
F2 - Use BetterLog to insert log into spreadsheet
Add MYB7yzedMbnJaMKECt6Sm7FLDhaBgl_dE in Resources > LibrariesReference: https://github.com/peterherrmann/BetterLog
function betterLog() { try { Logger = BetterLog.useSpreadsheet('1m7uBcRVRExuPINKA2c5j7jtMlf8stgeDrXL456DFHk'); } catch (e) { e = (typeof e === 'string') ? new Error(e) : e; Logger.severe('%s: %s (line %s, file "%s"). Stack: "%s" . While processing %s.', e.name || '', e.message || '', e.lineNumber || '', e.fileName || '', e.stack || '', e.processingMessage || ''); throw e; } }
F3 - Import CSV data from weblink via API
function importCSVFromWeb() { betterLog(); // Provide the full URL of the CSV file. var csvUrl = "https://pinka.is.number.one/api/download/datamodel?token=PINKA&dm_name=pinka_db&format=csv"; var csvContent = UrlFetchApp.fetch(csvUrl).getContentText(); var csvData = Utilities.parseCsv(csvContent);var ss = SpreadsheetApp.openById(‘1NVOttx-KnXbPINKAH9yp6PINKAdOk5ISgK_12328E’);
var sheet = ss.getSheetByName(‘Total’);
Logger.log(‘Importing CSV data from weblink into Sheet Total’);sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
Logger.log(‘Imported CSV data from weblink into Sheet Total’);}
F4 - Get Col Index by Cell Value
function getColIndexByName(sheet, nameCol) { var range = sheet.getRange(1, 1, 1, sheet.getMaxColumns()); var values = range.getValues();for (var row in values) {
for (var col in values[row]) {
if (values[row][col] == nameCol) {
return parseInt(col);
}
}
}
}
F5 - Get Row Index by Cell Value
function getRowIndexByName(sheet, nameRow) { var range = sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns()); var values = range.getValues();for (var row in values) { for (var col in values[row]) { if (values[row][col] == nameRow) { return parseInt(row); } } }
}
F6 - Convert Col Index to Col Letter
function getColumnLetter(column) { var temp, letter = ''; while (column > 0) { temp = (column - 1) % 26; letter = String.fromCharCode(temp + 65) + letter; column = (column - temp - 1) / 26; } return letter; }
F7 - Copy whole sheet
function copyToLIST() { for (var v = 0; v < nameList.length; v++) { objList[v] = source.getSheetByName(nameList[v]); var name = nameList[v].concat('_copy'); objList[v].copyTo(target).setName(name); Logger.log('Copied Sheet from %s to %s of Spreadsheet %s', nameList[v], name, nameDist); } }
F8 - Copy values from sheet to sheet
function copySheet() {betterLog(); var ss = SpreadsheetApp.openById('1_r91LMpp453mbPINKAKi4jf39_dqLXHS7XFS-iZG2k'); var dest = SpreadsheetApp.openById('1_r91LMppPINKAtXOLoKi4jf39_dqLXHS7XFS-iZG2k'); var vname = 'Vietnamese'; var sheetTmp = ss.getSheetByName('Tmp'); var sheetv = dest.getSheetByName(vname); var lastRow = sheetTmp.getLastRow(); var rangeNewTmp = sheetTmp.getRange(1, 1, lastRow + 1, 28) rangeNewTmp.copyValuesToRange(sheetv, 1, 28, 1, lastRow + 1); Logger.log('Copied values from Sheet %s to Sheet %s', 'Tmp', vname);
}
F9 - Rearrange order of sheets
function orderSheet() { betterLog(); var ss = SpreadsheetApp.openById('1_r91LMppDiPINKAOLoPINKA9_dqLXHS7XFS-iZG2k'); var sheets = ss.getSheets(); if (sheets.length > 1) { for (var i in sheets) { var nameSheet = sheets[i].getName(); if (nameSheet == 'Total') { ss.setActiveSheet(ss.getSheetByName('Total')); ss.moveActiveSheet(1); Logger.log('Reordered sheet %s', 'Total'); } else if (nameSheet == 'Vietnamese') { ss.setActiveSheet(ss.getSheetByName('Vietnamese')); ss.moveActiveSheet(2); Logger.log('Reordered sheet %s', 'Vietnamese'); } else if (nameSheet == 'North') { ss.setActiveSheet(ss.getSheetByName('North')); ss.moveActiveSheet(3); Logger.log('Reordered sheet %s', 'North'); } else if (nameSheet == 'South') { ss.setActiveSheet(ss.getSheetByName('South')); ss.moveActiveSheet(4); Logger.log('Reordered sheet %s', 'South'); } else if (nameSheet == 'Log') { ss.setActiveSheet(ss.getSheetByName('Log')); ss.moveActiveSheet(5); Logger.log('Reordered sheet %s', 'Log'); } } } }
F10 - Delete sheets
function delSheet() { betterLog(); var ss = SpreadsheetApp.openById('1_r91LMppDi3mbPINKAKi4jf39_dqLXHS7XFS-iZG2k'); var sheets = ss.getSheets(); if (sheets.length > 1) { var tmpSheet = ss.getSheetByName('Tmp'); if (tmpSheet) { var delSheet = ss.setActiveSheet(tmpSheet); ss.deleteSheet(delSheet); Logger.log('Deleted sheet %s', 'Tmp'); } } }
F11 - Set data validation based on list of items
function validateList() { betterLog(); var colIndex13 = getColIndexByName(sheetOld, "CapDiaDiem") + 1; var colLetter13 = getColumnLetter(colIndex13);var cells13 = sheetOld.getRange(2, colIndex13, rows - 1, 1); // CapDiaDiem var rule13 = SpreadsheetApp.newDataValidation() .requireValueInList(['Thôn', 'Xã', 'Huyện', 'Tỉnh'], true) .setAllowInvalid(false) .setHelpText("Vui lòng chỉ chọn lựa chọn có sẵn trong danh sách CapDiaDiem!") .build(); cells13.setDataValidation(rule13); var help13 = cells13.getDataValidation().getHelpText(); Logger.log('Created data validation rule [%s] for Range 13 (%s%s:%s), Sheet %s of Spreadsheet %s', help13, colLetter13, '2', colLetter13, old, nameDist);
}
F12 - Set data validation based on range
function validateRange() { betterLog(); var colIndex8 = getColIndexByName(sheetOld, "TinhChat") + 1; var colLetter8 = getColumnLetter(colIndex8); var cells8 = sheetOld.getRange(2, colIndex8, rows - 1, 1); // TinhChat var range8 = objList[2].getRange('F2:F'); var rule8 = SpreadsheetApp.newDataValidation() .requireValueInRange(range8, true) .setAllowInvalid(false) .setHelpText("Vui lòng chỉ chọn lựa chọn có sẵn trong danh sách TinhChat!") .build(); cells8.setDataValidation(rule8); var help8 = cells8.getDataValidation().getHelpText(); Logger.log('Created data validation rule [%s] for Range 8 (%s%s:%s), Sheet %s of Spreadsheet %s', help8, colLetter8, '2', colLetter8, old, nameDist); }
F13 - Clear conditional format rules
function clearFormatRules() { sheet.clearConditionalFormatRules(); Logger.log('Deleted conditional format rule'); }
F14 - Clear formatting
function clearFormatRules() { sheet.clearFormats(); Logger.log('Deleted formatting'); }
F15 - Set conditional formatting
var sheet = dest.getSheetByName(s_name); var rows = sheet.getMaxRows(); var cols = sheet.getMaxColumns();var colIndex1 = getColIndexByName(sheet, ‘Trạng thái gọi’) + 1;
var colLetter1 = getColumnLetter(colIndex1);var range = sheet.getRange(12, 1, rows - 12, colIndex4 - 1);
var range2 = sheet.getRange(12, colIndex4, rows - 12, 1);
Logger.log(‘Sheet %s’, s_name);var formula1 = ‘=AND(OR(’
.concat(’$’).concat(colLetter1).concat(‘12=“PV thành công”,’)
.concat(’$’).concat(colLetter1).concat(‘12=“PV trực tiếp TC”),’)
.concat(‘OR($’).concat(colLetter2).concat(‘12=“Đã chuyển tiền”,’)
.concat(’$’).concat(colLetter2).concat(‘12=“Không nhận tiền”),’)
.concat(’$’).concat(colLetter3).concat(‘12=“Đã nhập”)’);var rule1 = SpreadsheetApp.newConditionalFormatRule()
.whenFormulaSatisfied(formula1)
.setBackground("#9D9D9D") // Grey
.setRanges([range])
.build();Logger.log(‘Set Conditional Format for Grey Case’);
Logger.log(formula1);
F16 - Set Query Formula
function setQueryFormula() { var v = 'PINKA'; var vname = 'PINKA01'; var sheetv = dest.getSheetByName(vname); var lastRow = sheetTmp.getLastRow(); var rangeTo = sheetv.getRange(1, 1, lastRow + 1, 9) sheetTmp.getRange("A1").setFormula('=QUERY(Total!A:I, "select A,C,D,E,I,F,G,H where D='.concat(v).concat('")')); Logger.log('Set Formula for Sheet %s', 'Tmp'); var rangeNewTmp = sheetTmp.getRange(1, 1, lastRow + 1, 9) // rangeNewTmp.copyTo(rangeTo, SpreadsheetApp.CopyPasteType.PASTE_VALUES); rangeNewTmp.copyValuesToRange(sheetv, 1, 9, 1, lastRow + 1); Logger.log('Copied values from Sheet %s to Sheet %s', 'Tmp', vname); }
F17 - Set Sharing permission of the file to COMMENT only for ANYONE_WITH_LINK
function setSharing() { var url_source = SpreadsheetApp.openById("1zInuSeV3LPINKAE1Achw1ZmIKu9G3ML0oAn3L3ZNzc"); // DiaDiem var url = url_source.getSheetByName('URL');var rowIndex = getRowIndexByName(url, "PINKA") + 1; var colIndex = getColIndexByName(url, "url") + 1; var url1 = url.getRange(rowIndex, colIndex).getValue(); // get sublink value of District var fileID = url1; var file = DriveApp.getFileById(fileID); file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.COMMENT);
}