Skip to content

Instantly share code, notes, and snippets.

@marcgeld
Last active December 7, 2022 16:19
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save marcgeld/a2023c2ddf5baeeee18f7f3e0bc9ed28 to your computer and use it in GitHub Desktop.
Save marcgeld/a2023c2ddf5baeeee18f7f3e0bc9ed28 to your computer and use it in GitHub Desktop.
A jxa script to create a spreadsheet in Apple numbers
let numbers = Application('Numbers')
numbers.includeStandardAdditions = true
numbers.activate()
delay(1)
SystemEvents = Application('System Events')
Notes = SystemEvents.processes['Numbers']
let jsonStr = "[{\"datum\":\"26 januari 2018 16:28\",\"biljett\":\"Enkelbiljett\",\"pris\":\"39,00\",\"moms\":\"2,21\",\"total\":\"39,00\"},{\"datum\":\"24 januari 2018 17:09\",\"biljett\":\"Enkelbiljett\",\"pris\":\"39,00\",\"moms\":\"2,21\",\"total\":\"39,00\"},{\"datum\":\"20 januari 2018 16:14\",\"biljett\":\"Enkelbiljett\",\"pris\":\"47,00\",\"moms\":\"2,66\",\"total\":\"47,00\"},{\"datum\":\"14 januari 2018 02:17\",\"biljett\":\"Enkelbiljett\",\"pris\":\"27,00\",\"moms\":\"1,53\",\"total\":\"27,00\"},{\"datum\":\"13 januari 2018 18:06\",\"biljett\":\"Enkelbiljett\",\"pris\":\"27,00\",\"moms\":\"1,53\",\"total\":\"27,00\"},{\"datum\":\"22 december 2017 14:22\",\"biljett\":\"Enkelbiljett\",\"pris\":\"46,00\",\"moms\":\"2,60\",\"total\":\"46,00\"},{\"datum\":\"21 december 2017 17:20\",\"biljett\":\"Enkelbiljett\",\"pris\":\"38,00\",\"moms\":\"2,15\",\"total\":\"38,00\"},{\"datum\":\"15 december 2017 18:07\",\"biljett\":\"Enkelbiljett\",\"pris\":\"46,00\",\"moms\":\"2,60\",\"total\":\"46,00\"},{\"datum\":\"06 december 2017 16:18\",\"biljett\":\"Enkelbiljett\",\"pris\":\"38,00\",\"moms\":\"2,15\",\"total\":\"38,00\"},{\"datum\":\"01 december 2017 15:54\",\"biljett\":\"Enkelbiljett\",\"pris\":\"38,00\",\"moms\":\"2,15\",\"total\":\"38,00\"},{\"datum\":\"22 november 2017 16:13\",\"biljett\":\"Enkelbiljett\",\"pris\":\"38,00\",\"moms\":\"2,15\",\"total\":\"38,00\"},{\"datum\":\"22 november 2017 08:52\",\"biljett\":\"Enkelbiljett\",\"pris\":\"38,00\",\"moms\":\"2,15\",\"total\":\"38,00\"},{\"datum\":\"20 november 2017 08:50\",\"biljett\":\"Enkelbiljett\",\"pris\":\"38,00\",\"moms\":\"2,15\",\"total\":\"38,00\"},{\"datum\":\"03 november 2017 13:41\",\"biljett\":\"Enkelbiljett\",\"pris\":\"46,00\",\"moms\":\"2,60\",\"total\":\"46,00\"},{\"datum\":\"02 november 2017 12:37\",\"biljett\":\"Enkelbiljett\",\"pris\":\"46,00\",\"moms\":\"2,60\",\"total\":\"46,00\"},{\"datum\":\"30 oktober 2017 15:04\",\"biljett\":\"Enkelbiljett\",\"pris\":\"46,00\",\"moms\":\"2,60\",\"total\":\"46,00\"},{\"datum\":\"21 oktober 2017 13:39\",\"biljett\":\"Enkelbiljett\",\"pris\":\"46,00\",\"moms\":\"2,60\",\"total\":\"46,00\"},{\"datum\":\"13 oktober 2017 20:42\",\"biljett\":\"Enkelbiljett\",\"pris\":\"46,00\",\"moms\":\"2,60\",\"total\":\"46,00\"},{\"datum\":\"13 oktober 2017 20:42\",\"biljett\":\"Enkelbiljett\",\"pris\":\"46,00\",\"moms\":\"2,60\",\"total\":\"46,00\"},{\"datum\":\"13 oktober 2017 19:06\",\"biljett\":\"Enkelbiljett\",\"pris\":\"46,00\",\"moms\":\"2,60\",\"total\":\"46,00\"},{\"datum\":\"13 oktober 2017 19:06\",\"biljett\":\"Enkelbiljett\",\"pris\":\"46,00\",\"moms\":\"2,60\",\"total\":\"46,00\"},{\"datum\":\"13 oktober 2017 16:44\",\"biljett\":\"Enkelbiljett\",\"pris\":\"46,00\",\"moms\":\"2,60\",\"total\":\"46,00\"},{\"datum\":\"13 oktober 2017 16:44\",\"biljett\":\"Enkelbiljett\",\"pris\":\"46,00\",\"moms\":\"2,60\",\"total\":\"46,00\"},{\"datum\":\"13 oktober 2017 07:11\",\"biljett\":\"Enkelbiljett\",\"pris\":\"26,00\",\"moms\":\"1,47\",\"total\":\"26,00\"},{\"datum\":\"13 oktober 2017 07:11\",\"biljett\":\"Enkelbiljett\",\"pris\":\"26,00\",\"moms\":\"1,47\",\"total\":\"26,00\"},{\"datum\":\"29 september 2017 15:31\",\"biljett\":\"Enkelbiljett\",\"pris\":\"38,00\",\"moms\":\"2,15\",\"total\":\"38,00\"},{\"datum\":\"21 september 2017 18:21\",\"biljett\":\"Enkelbiljett\",\"pris\":\"26,00\",\"moms\":\"1,47\",\"total\":\"26,00\"},{\"datum\":\"02 september 2017 11:36\",\"biljett\":\"Enkelbiljett\",\"pris\":\"46,00\",\"moms\":\"2,60\",\"total\":\"46,00\"},{\"datum\":\"19 augusti 2017 16:41\",\"biljett\":\"Enkelbiljett\",\"pris\":\"72,00\",\"moms\":\"4,08\",\"total\":\"72,00\"},{\"datum\":\"19 augusti 2017 16:41\",\"biljett\":\"Enkelbiljett\",\"pris\":\"72,00\",\"moms\":\"4,08\",\"total\":\"72,00\"},{\"datum\":\"19 augusti 2017 13:06\",\"biljett\":\"Enkelbiljett\",\"pris\":\"46,00\",\"moms\":\"2,60\",\"total\":\"46,00\"},{\"datum\":\"19 augusti 2017 13:06\",\"biljett\":\"Enkelbiljett\",\"pris\":\"46,00\",\"moms\":\"2,60\",\"total\":\"46,00\"},{\"datum\":\"15 augusti 2017 13:19\",\"biljett\":\"Enkelbiljett\",\"pris\":\"46,00\",\"moms\":\"2,60\",\"total\":\"46,00\"},{\"datum\":\"15 augusti 2017 13:19\",\"biljett\":\"Enkelbiljett\",\"pris\":\"46,00\",\"moms\":\"2,60\",\"total\":\"46,00\"},{\"datum\":\"24 juli 2017 14:07\",\"biljett\":\"Enkelbiljett\",\"pris\":\"46,00\",\"moms\":\"2,60\",\"total\":\"46,00\"},{\"datum\":\"13 juli 2017 11:14\",\"biljett\":\"Enkelbiljett\",\"pris\":\"46,00\",\"moms\":\"2,60\",\"total\":\"46,00\"}]"
let obj = JSON.parse(jsonStr)
let newDocument = numbers.Document().make()
var sheet = numbers.documents[0].sheets[0]
sheet.name.set('vt kvitton')
var table = sheet.tables[0]
table.name.set('2017-01-01 - 2017-12-31')
let rows = Object.keys(obj).length
let cols = rows > 1? Object.keys(obj[0]).length : -1
prettyLog(rows + ":" + cols)
//debugger
if (rows > 0 && cols > 0) {
table.rowCount.set(rows+1)
table.columnCount.set(cols+1)
// Start at column B
var headerCol = 66
headers = Object.keys(obj[0])
headers.forEach(function(element) {
var cellAdr = String.fromCharCode(headerCol++)
var cell = table.cells[cellAdr + "1"]
cell.value = element
})
for (i = 0; i < obj.length; i++) {
table.cells["B" + (i + 2)].value = obj[i].datum
table.cells["C" + (i + 2)].value = obj[i].biljett
table.cells["D" + (i + 2)].value = obj[i].pris
table.cells["E" + (i + 2)].value = obj[i].moms
table.cells["F" + (i + 2)].value = obj[i].total
}
}
function prettyLog( object ) {
console.log(Automation.getDisplayString(object))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment