Google Spreadsheets API

Förutom att Google Spreadsheets är ett grymt bra kalkylprogram går det även att styra det med hjälp av ett API. Här är ett exempel på hur det går till.

I följande exempel uppdaterar vi en telefonlista med telefonnummer genom att ange namn. Skriptet letar efter första raden som har värdet från parametern –lookup i kolumnen ”namn”. Kolumnen ”tel” uppdateras då med värdet från parametern –newdata.

Om man ska göra många uppdateringar kan det vara en bra idé att göra allt inne i Python så man behåller samma session mot Google. Jag har märkt att man råkar ut för deras Captcha om man kör något hundratal inloggningar med kort mellanrum.

Kolumnnamn ska alltid anges med små bokstäver. Dokumentnamn och kalkylbladsnamn spelar däremot ingen roll.

#!/usr/bin/python
    
import gdata.spreadsheet.text_db
import sys
import getopt
    
__lookupCol__ = 'namn'
__dataCol__ = 'tel'
    
__username__ = 'anders@example.com'
__password__ = 'secret'
    
__document__ = 'Adressboken'
__worksht__ = 'Telefonlista'
        
opts, args = getopt.getopt(sys.argv[1:], "", ["lookup=", "newdata="])
    
lookup = ''
newdata = ''
    
for o, a in opts:
if o == "--lookup":
  lookup = a
elif o == "--newdata":
  newdata = a
    
if lookup == '' or newdata == '':
  print '--lookup [lookupdata] --newdata [newdata] '
  sys.exit(2)
    
client = gdata.spreadsheet.text_db.DatabaseClient(username = __username__, password = __password__)
    
databases = client.GetDatabases(name = __document__)
database = databases[0]
    
tables = database.GetTables(name = __worksht__)
table = tables[0]
    
result = table.FindRecords(__lookupCol__ + '="' + lookup + '"')
record=result[0]    
print "Old value: ",record.entry.custom[__dataCol__].text
record.ExtractContentFromEntry(record.entry)  
record.content[__dataCol__] = newdata  
record.Push()
    
print "New value: " + record.entry.custom[__dataCol__].text