Skip to content

Instantly share code, notes, and snippets.

@palumbo
Last active December 11, 2023 00:39
Show Gist options
  • Save palumbo/197e21548c6eb773e9e5907a16321c82 to your computer and use it in GitHub Desktop.
Save palumbo/197e21548c6eb773e9e5907a16321c82 to your computer and use it in GitHub Desktop.
Create a Notion-Style Life OS Dashboard in Google Sheets
function onOpen() {
randomQuote();
let ui = SpreadsheetApp.getUi();
ui.createMenu("Life OS")
.addItem("New Quote", "randomQuote")
.addItem("New Journal Entry", "dailyJournal")
.addToUi();
}
function randomQuote() {
// spreadsheet variables
let ss = SpreadsheetApp.getActiveSpreadsheet();
let dashboard = ss.getSheetByName("Dashboard");
let quoteList = ss.getSheetByName("Quotes");
let quoteLastRow = quoteList.getLastRow();
// random number generator
let randomNumber = Math.floor(Math.random() * quoteLastRow + 1);
let quote = quoteList.getRange(randomNumber,2).getValue();
let author = quoteList.getRange(randomNumber,3).getValue();
dashboard.getRange("C3").setValue(quote);
dashboard.getRange("C4").setValue("-" + author);
}
function dailyJournal() {
// spreadsheet variables
let ss = SpreadsheetApp.getActiveSpreadsheet();
let dashboard = ss.getSheetByName('Dashboard');
// get today's date
let today = Utilities.formatDate(new Date(), "GMT-6", "yyyy.MM.dd");
let month = Utilities.formatDate(new Date(), "GMT-6", "MMMM");
// get last row of journal section
let journalValues = dashboard.getRange("C19:C").getValues();
let journalLastRow = journalValues.filter(String).length;
let journalFolder = DriveApp.getFolderById("[FOLDER ID");
let files = journalFolder.getFiles();
let checkFile = 0;
while (files.hasNext()) {
let file = files.next();
Logger.log(file);
if (file == today) {
Logger.log(file + " - found a match!")
checkFile++;
Logger.log("Checkfile: " + checkFile);
}
}
if (checkFile == 0) {
// create a new journal entry
let journalEntry = DriveApp.getFileById([FILE ID]).makeCopy(today).getId();
let url = DriveApp.getFileById(journalEntry).getUrl();
let journalLink = SpreadsheetApp.newRichTextValue().setText(today).setLinkUrl(url).build();
dashboard.getRange(19 + journalLastRow, 3).setValue(month);
dashboard.getRange(19 + journalLastRow, 4).setRichTextValue(journalLink);
dashboard.getRange(19 + journalLastRow, 5).setValue("Daily");
} else {
Browser.msgBox('File already exists');
}
}
function onEdit(e) {
// SPREADSHEET VARIABLES
let ss = SpreadsheetApp.getActiveSpreadsheet();
let dashboard = ss.getSheetByName('Dashboard');
let col = e.range.getColumn();
let row = e.range.getRow();
if ( col == 12 ) {
dashboard.getRange(row,13).insertCheckboxes();
let task = dashboard.getActiveCell().getValue();
if (task.indexOf(">") > -1) {
let splitTask = task.split(">");
let project = splitTask[0];
task = splitTask[1];
let dueDate = splitTask[2];
dashboard.getRange(row, col).setValue(task).trimWhitespace();
dashboard.getRange(row, col+2).setValue(project).trimWhitespace();
dashboard.getRange(row, col+3).setValue(dueDate).trimWhitespace();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment