2016-04-05 8 views
1

Ich versuche, Python-Prozedur zu schreiben, um eine Tabelle aus Google Spreadsheets herunterzuladen und speichern Sie sie als .xls. hier ist mein CodeLaden Sie Google Spreadsheet herunter und speichern Sie als xls

import os 
import sys 
from getpass import getpass 

import gdata.docs.service 
import gdata.spreadsheet.service 



''' 
    get user information from the command line argument and 
    pass it to the download method 
''' 
def get_gdoc_information(): 
    email ="mygmailaccount" 
    password ="mypassword" 
    gdoc_id = ['google_id1','googleid2','googleidn'] 
    for doc_id in gdoc_id: 
     try: 
      download(doc_id, email, password) 
     except Exception, e: 
      raise e 

#python gdoc.py 1m5F5TXAQ1ayVbDmUCyzXbpMQSYrP429K1FZigfD3bvk#gid=0 
def download(doc_id, email, password, download_path=None,): 
    print "Downloading the XLS file with id %s" % doc_id 

    gd_client = gdata.docs.service.DocsService() 


    #auth using ClientLogin 
    gs_client = gdata.spreadsheet.service.SpreadsheetsService() 
    gs_client.ClientLogin(email, password) 

    #getting the key(resource id and tab id from the ID) 

    resource = doc_id.split('#')[0] 
    tab   = doc_id.split('#')[1].split('=')[1] 
    resource_id = 'spreadsheet:'+resource 

    if download_path is None: 
     download_path = os.path.abspath(os.path.dirname(__file__)) 

    file_name = os.path.join(download_path, '%s.xls' % (doc_id)) 

    print 'Downloading spreadsheet to %s...' % file_name 

    docs_token = gd_client.GetClientLoginToken() 
    gd_client.SetClientLoginToken(gs_client.GetClientLoginToken()) 
    gd_client.Export(resource_id, file_name, gid=tab) 
    gd_client.SetClientLoginToken(docs_token) 

    print "Download Completed!" 


if __name__=='__main__': 
    get_gdoc_information() 

Jedes Mal, wenn ich versuche, es zu laufen, ich unten

einen gdata Fehler erhalten
gdata.service.RequestError: {'status': 401, 'body': '<HTML>\n<HEAD>\n<TITLE>Unauthorized</TITLE>\n</HEAD>\n<BODY BGCOLOR="#FFFFFF" TEXT="#000000">\n<H1>Unauthorized</H1>\n<H2>Error 401</H2>\n</BODY>\n</HTML>\n', 'reason': 'Unauthorized'} 

Am mit gdata Bibliothek. Ich habe mit diesem ganzen Tag gekämpft und kann anscheinend nicht herausfinden, was passiert. Kann jemand bitte herausfinden und assit? Jedes andere minimale Skript, das meinen oben beschriebenen Zweck erreichen kann, wird sehr geschätzt. Vielen Dank

Antwort

0

Sie auch die Bibliothek pygsheets versuchen könnte.

import pygsheets 

gc = pygsheets.authorize() 

# Open spreadsheet and then workseet 
sh = gc.open('my new ssheet') 
wks = sh.sheet1 

#export as csv 
wks.export(pygsheets.ExportType.MS_Excel) 
0

(Februar 2017) meisten Antworten (einschließlich dem Code im OP) sind jetzt out-of-date als ClientLogin authentication was deprecated zurück im Jahr 2012 (!), Und GData APIs sind die vorherige Generation von Google APIs. Während nicht alle GData-APIs veraltet sind, verwenden Sie tun nicht verwenden the Google Data protocol, einschließlich der neuesten Google Sheets API (v4), die viel leistungsfähiger ist als ältere API-Versionen &.

ist jedoch zu beachten, dass die Blätter API programmatisch Zugriff & Funktionalität (Formatieren von Zellen, Zell Validierung, Spalten Größenänderung, wodurch Diagramme, Pivot-Tabellen, etc.), aber Datei -Niveau Zugriffstabellenkalkulationsoperationen hauptsächlich für durchzuführen wie zum Beispiel nach XLS (X) exportieren, verwenden Sie stattdessen die Google Drive API. Beispiele für die Verwendung der Drive API:

  • Exportieren einer Google-Tabelle als CSV (blog post)
  • "armen Mannes Klartext PDF" Wandler (blog post) (*)

(*) - TL; DR: Laden Sie eine Textdatei in Drive hoch, importieren/konvertieren Sie sie in das Google Docs-Format und exportieren Sie das Dokument als PDF. Der obige Beitrag verwendet Drive API v2; this follow-up post beschreibt die Migration zu Drive API v3, und hier ist ein developer video, der beide Posts von "arm man's converter" kombiniert.

Die Lösung für das OP besteht darin, denselben Vorgang wie im obigen Beitrag "Exportieren eines Google-Blattes als CSV" auszuführen, aber den MIME-Exporttyp von text/csv in zu ändern.Weitere Import/Export-Formate von/zu Drive finden Sie unter this related question SO answer sowie downloading files from Drive docs page.

Um mehr darüber zu erfahren, wie Google-APIs mit Python im Allgemeinen verwenden Besuche my blog sowie eine Vielzahl von Google-Entwickler-Videos (series 1 und series 2) Ich bin zu erzeugen.