Last active
December 11, 2023 00:39
-
-
Save palumbo/197e21548c6eb773e9e5907a16321c82 to your computer and use it in GitHub Desktop.
Create a Notion-Style Life OS Dashboard in Google Sheets
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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