2016-08-09 195 views
1

Hier ValueRenderOption in google-api-Python-Client zu verwenden, ist ein Code-Schnipsel:Wie für Google Blätter

import ast 
from oauth2client import file, client, tools 
from oauth2client.service_account import ServiceAccountCredentials 
from httplib2 import Http 
from apiclient.discovery import build 
from apiclient import discovery 

SCOPE = 'https://www.googleapis.com/auth/spreadsheets' 
CREDJSON = "some-cred-file-downloaded-from-dev-console.json" 

def google_credentials(jsoncred=CREDJSON, scope=SCOPE): 
    return ServiceAccountCredentials.from_json_keyfile_name(jsoncred, scope) 


def csv_arrays(creds, key): 

    (SHEETS, sheets) = sheets_fetch(creds, key) 

    wks = sheets 
    def create_filename(arg): 
     filename = key.prefix + "_" + arg.get("properties, {}).get("title","Sheet1") 
     filename = filename.replace(" ", "_") 
     print (filename) 
     return filename 
    return [(create_filename(ws), ast.literal_eval(repr(SHEETS.spreadsheets().values().get(spreadsheetId=key.key, range=(ws.get("properties", {}).get("title", "Sheet1"))).execute().get('values',[])))) for ws in wks] #.decode("utf-8") 

def sheets_fetch(creds, key): 
    print('Now doing:', key) 
    SHEETS = build('sheets', 'v4', http=creds.authorize(Http())) 
    sheet_metadata = SHEETS.spreadsheets().get(spreadsheetId=key.key).execute() 
sheets = sheet_metadata.get('sheets', '') 

    return (SHEETS, sheets) 

Ich habe keine Probleme, den Inhalt der Zellen zu bekommen. Mein Problem ist, dass sie formatiert (wie dies der Standardwert ist) und ich möchte sie UNFORMATTED?

Wie setze ich die Option in der Abfrage der return-Anweisung von der csv_array-Funktion?

https://developers.google.com/sheets/reference/rest/v4/ValueRenderOption

Als Randbemerkung, gibt es eine Möglichkeit, die Zellen Wert in anderer Weise als als String ast-ed auf eine Liste zu bekommen?

Antwort

3

Um eine valueRenderOption von UNFORMATTED_VALUE mit dem Python-Client festzulegen, verwenden:

SHEETS.spreadsheets().values().get(spreadsheetId=key.key, range=myRange, valueRenderOption='UNFORMATTED_VALUE').execute()

Zusätzlich wird, wenn UNFORMATTED_VALUE verwenden, wird die Antwort eingegeben werden, wie es in Blätter (zB werden Zahlen Zahlen, Boole werden Boole, Strings werden Strings sein). Datumsangaben sind entweder Zeichenfolgen oder Zahlen, abhängig von DateTimeRenderOption, siehe Date/Time Serial Numbers Guide für weitere Informationen zum Umgang mit den Daten als Zahlen.

Da die Werte bereits korrekt eingegeben wurden, sollten Sie kein zusätzliches Parsing mit ast oder repr durchführen.

+0

Die erste Version funktioniert. Ich muss sowohl die repr und ast entfernen, um zu machen, "Get die Daten eingegeben, wie sein tatsächlicher Typ, anstatt immer als eine Zeichenfolge" können Sie aktualisieren Sie beantworten, damit ich es akzeptieren kann? – Sebastien

+0

danke für die Bestätigung! aktualisierte Antwort. –