2017-02-14 1 views
2

J'ai une feuille de calcul dont les dates sont au format "Jan 30" etc., mais avec des valeurs de date réelles.Comment lire la valeur des données de cellules récupérées en tant que dates google sheets API

enter image description here

Je récupérer les données en utilisant python google Sheets API comme ceci:

def get_spreadsheet_sheets(service, spreadsheetId): 
    spreadsheet = service.spreadsheets().get(spreadsheetId=spreadsheetId).execute() 
    dateCell = "C15" 
    for sheet in spreadsheet['sheets']: 
     sheetTitle = sheet['properties']['title'] 
     rangeName = "%s!%s" % (sheetTitle, dateCell) 
     result = service.spreadsheets().values().get(
      spreadsheetId=spreadsheetId, range=rangeName).execute() 
     values = result.get('values',[]) 
valeurs

me donne '30 Jan', je voudrais vraiment lire comme 1/30/2017 .. Comment puis-je faire?

mise à jour

Digger plus profondément dans la spreadsheets.value.get http documentation (ce qui correspond à la méthode client python api références here j'ai appris que je peux mettre l'option de valueRenderOption comme UNFORMATTED_VALUE ..

mais quand je lance que je reçois ce nombre bizarre pour Jan 30: 42765

enter image description here

w le format chapeau est ce nombre exactement? Je sais que ce n'est pas un horodatage unix b/c la conversion retourne une date non sensical

mise à jour 2: solution de contournement

ce code fonctionne, mais en utilisant le formatage de la date de python (il suppose également que l'année est l'année en cours .. mais évidemment cela ne sera pas toujours le cas):

def get_spreadsheet_sheets(service, spreadsheetId): 
    spreadsheet = service.spreadsheets().get(spreadsheetId=spreadsheetId).execute() 
    dateCell = "C15" 
    for sheet in spreadsheet['sheets']: 
     sheetTitle = sheet['properties']['title'] 
     rangeName = "%s!%s" % (sheetTitle, dateCell) 
     result = service.spreadsheets().values().get(
      spreadsheetId=spreadsheetId, range=rangeName).execute() 
     values = result.get('values',[]) 
     dateStr = "%s %s" % (values[0][0], datetime.date.today().year) 
     cellDate = datetime.datetime.strptime(dateStr, '%b %d %Y') 
     print(cellDate) 
+1

la valeur API python va chercher est ce que vous voyez sur la feuille de calcul et non la valeur sous-jacente que vous entrez à savoir les questions de format. –

+0

mais comment puis-je connaître l'année de la date à laquelle je l'ai récupérée si je reçois simplement «Jan 30»? – abbood

+1

Le moyen le plus simple serait de changer le format de la date. –

Répondre

2

le « numéro bizarre », il est appelé « valeur date-heure sérialisé » ou « date valeur série ». La valeur 0 affichée en tant que date (aaaa-mm-jj) est 1899-12-30. Entiers sont jours, les fractions sont heures, minutes, etc.

connexes: Converting Google spreadsheet date into a JS Date object?

Références:

h/t Sam Berlin

+0

Voir aussi: [Numéros de série DateTime] (https://developers.google.com/sheets/api/guides/concepts#datetime_serial_numbers) et [API Feuille de calcul Google V4 (Java) Ajout Date dans les cellules] (http: // stackoverflow.com/questions/37986171/google-sheet-api-v4java-append-date-in-cells/37993497#37993497). –

+0

@SamBerlin: Merci beaucoup. –

+0

Mis à jour pour le lien vers le Google Sheets> Guide API v4. Pour une raison quelconque, c'était très difficile à trouver, n'étant pas dans une section de son propre. – chutz