2016-07-18 103 views
5

Ho un googlesheet in cui una colonna non può contenere informazioni in esso. Mentre scorre le righe e guarda quella colonna, se la colonna è vuota, non restituisce nulla. Ancora peggio, se ottengo una fila completa e includo quella comune, diciamo prendi 5 colonne, torno indietro solo 4 colonne quando una delle colonne è vuota. Come posso restituire NULL o una stringa vuota se ottengo una riga di colonne e una delle celle in una colonna è vuota?Googlesheet APIv4 ottiene celle vuote

// Build a new authorized API client service. 
Sheets service = GoogleSheets.getSheetsService(); 
range = "Functional Users!A3:E3"; 
response = service.spreadsheets().values().get(spreadsheetId, range).execute(); 
values = response.getValues(); 
cells = values.get(0); 

Sto ricevendo 5 celle nella riga. cells.size() dovrebbe SEMPRE restituire cinque. Tuttavia, se una delle 5 celle è vuota, restituirà un numero inferiore di celle. Dì solo che la cella in B3 è vuota. cells.size() sarà 4. Prossima iterazione, ottengo A4: E4 e la cella D4 è vuota. Ancora una volta, cells.size() sarà 4. Non c'è modo di sapere quale cella manca. Se A4 E D4 E E4 sono vuoti, cells.size() sarà 2.

Come ottengo che restituisca 5 celle indipendentemente dalle celle vuote?

risposta

3

Mi sono dilettato in Sheetsv4 e questo è davvero il comportamento quando si legge un intervallo di celle con dati vuoti. Sembra che questo sia il modo in cui è stato progettato. Come indicato nello Reading data docs:

Le righe e le colonne finali vuote vengono omesse.

Quindi se riesci a trovare un modo per scrivere un carattere che rappresenti 'valori vuoti', come zero, allora quello sarà un modo per farlo.

1

Il modo in cui ho risolto questo problema era la conversione dei valori in un dataframe di Pandas. Ho recuperato le colonne specifiche che volevo nei miei fogli Google, quindi li ho convertiti in un dataframe di Pandas. Una volta convertito il set di dati in un dataframe di Pandas, ho eseguito alcune formattazioni dei dati, quindi ho convertito il dataframe in una lista. Convertendo la lista in un dataframe di Pandas, ogni colonna viene preservata. Pandas crea già valori nulli per righe e colonne finali vuote. Tuttavia, avevo bisogno di convertire anche le righe non finali con valori null per mantenere la coerenza.

# Authenticate and create the service for the Google Sheets API 
credentials = ServiceAccountCredentials.from_json_keyfile_name(KEY_FILE_LOCATION, SCOPES) 
http = credentials.authorize(Http()) 
discoveryUrl = ('https://sheets.googleapis.com/$discovery/rest?version=v4') 
service = discovery.build('sheets', 'v4', 
    http=http,discoveryServiceUrl=discoveryUrl) 

spreadsheetId = 'id of your sheet' 
rangeName = 'range of your dataset' 
result = service.spreadsheets().values().get(
    spreadsheetId=spreadsheetId, range=rangeName).execute() 
values = result.get('values', []) 

#convert values into dataframe 
df = pd.DataFrame(values) 

#replace all non trailing blank values created by Google Sheets API 
#with null values 
df_replace = dataset.replace([''], [None]) 

#convert back to list to insert into Redshift 
processed_dataset = df_replace.values.tolist()