I am new to Apps Script. This is my very first code. Between CoPilot, Google and I we managed to create the following code block. But I have two questions –
-
I would like to add a conditional format to the range A11:G65 – So that when the checkbox in column A is checked, it will highlight the entire row a color. Let’s just say green.
-
I would like to center the image over a merged range. This is in vitally important. But would be aesthetically pleasing.
function eraseAndRebuildSheet() {
var newSheetName = "Daily Tardy Log";
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
try {
var oldSheet = spreadsheet.getSheetByName(newSheetName);
if (oldSheet) {
spreadsheet.deleteSheet(oldSheet);
Logger.log("Old sheet deleted successfully.");
}
var newSheet = spreadsheet.insertSheet(newSheetName);
newSheet.deleteColumns(7, 19);
newSheet.deleteRows(65, 935);
newSheet.setFrozenRows(9);
Logger.log("New sheet created: " + newSheetName);
newSheet.setColumnWidth(1, 76);
newSheet.setColumnWidth(2, 178);
newSheet.setColumnWidth(3, 178);
newSheet.setColumnWidth(4, 178);
newSheet.setColumnWidth(5, 178);
newSheet.setColumnWidth(6, 100);
newSheet.setColumnWidth(7, 250);
newSheet.getRange(1, 1, newSheet.getMaxRows(), newSheet.getMaxColumns()).setFontSize(12);
newSheet.getRange("E:E").setHorizontalAlignment("center");
newSheet.getRange("F:F").setHorizontalAlignment("center");
newSheet.getRange("A9:G9").setHorizontalAlignment("center");
newSheet.getRange("D3").setHorizontalAlignment("Center");
newSheet.getRange("D5").setHorizontalAlignment("Right");
newSheet.getRange("A4").setHorizontalAlignment("Center");
newSheet.getRange("B10:B").setHorizontalAlignment("Left");
newSheet.setHiddenGridlines(true);
newSheet.getRange("A9").setFormula('="Synergy"');
newSheet.getRange("B9").setFormula('="TimeStamp"');
newSheet.getRange("C9").setFormula('="Student First Name"');
newSheet.getRange("D9").setFormula('="Student Last Name"');
newSheet.getRange("E9").setFormula('="Student ID Number"');
newSheet.getRange("F9").setFormula('="Teacher"');
newSheet.getRange("G9").setFormula('="Reason for Tardy"');
newSheet.getRange("C3").setFormula('="Copper Basin Daily Tardy Log"');
newSheet.getRange("D5").setFormula('="Tardies on:"');
newSheet.getRange('C3:G3').merge();
newSheet.getRange('A1:B8').merge();
newSheet.getRange("B1:C8").setHorizontalAlignment("Center");
newSheet.getRange("B10").setFormula('=Filter(AutoCrat!E:J, AutoCrat!A:A=$E$5)');
Logger.log("Width, Headers and Title added successfully!");
var imageUrl = "https://docs.google.com/drawings/d/e/2PACX-1vSgsRcSXcZVK0XDZFcGmMEMbnV0uQgm5aqh9u_wqqxGDtZVhwVZ6r2yUMSmF3XJXh9MoWSGsfVLi38G/pub?w=191&h=173";
var image = newSheet.insertImage(imageUrl, 1,1);
Logger.log("Image added successfully!");
var headerRange = newSheet.getRange("A9:G9");
headerRange.setFontWeight("bold");
headerRange.setFontSize(12);
var titleRange = newSheet.getRange("C3");
titleRange.setFontWeight("bold");
titleRange.setFontSize(24);
var range = newSheet.getRange(9, 1, newSheet.getMaxRows() - 1, newSheet.getMaxColumns());
var banding = range.applyRowBanding(SpreadsheetApp.BandingTheme.LIGHT_GREY);
banding.setFirstRowColor("#FFFFFF");
banding.setSecondRowColor("#f3f3f3");
Logger.log("Alternating Colors applied successfully!");
var checkboxRange = newSheet.getRange("A10:A65");
checkboxRange.insertCheckboxes();
Logger.log("Checkboxes added successfully!");
//PUT CONDITIONAL FORMATTING HERE.... Whenever you figure it out.
Logger.log("Conditional Formatting Applied Successfully!");
var sourceSheet = spreadsheet.getSheetByName('Teacher List');
var dateRange = sourceSheet.getRange('F2:F');
var values = dateRange.getValues()
.filter(function(row) {
return row[0] !== '';
})
.map(function(row) {
if (row[0] instanceof Date) {
return [Utilities.formatDate(new Date(row[0]), Session.getScriptTimeZone(), 'MM/dd/yyyy')];
} else {
Logger.log("Invalid date found: " + row[0]);
return ["Invalid Date"];
}
})
.filter(function(row) {
return row[0] !== "Invalid Date";
});
var statusRule = SpreadsheetApp.newDataValidation().requireValueInList(values.flat(), true).build();
newSheet.getRange("E5").setDataValidation(statusRule);
Logger.log("Data Validation Applied");
spreadsheet.setActiveSheet(newSheet);
spreadsheet.moveActiveSheet(1);
Logger.log("New sheet moved to the first tab position successfully!");
} catch (e) {
Logger.log("Error: " + e.message);
}
}```
I've tried a bunch of things. I think that it probably needs to be an onEdit function. But I am just spinning my wheels now, and am coming to a community of experts.
Thanks.
Sarah
Sarah Harrison is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.