2016-07-18 185 views
5

我有一個Google表格,列中可能不包含任何信息。在遍歷行並查看該列時,如果該列爲空,則不會返回任何內容。更糟糕的是,如果我得到一整行幷包含常見的數據,比如獲得5列,那麼當任何一列爲空時,我只返回4列。如果我得到一行列並且列中的一個單元格爲空,我該如何返回NULL或空字符串?Google表格APIv4獲取空單元格

// 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); 

我在行中獲得5個單元格。 cells.size()應該總是返回五。但是,如果5個單元中的任何一個都是空白的,它將返回更少的單元。假設只有B3處的單元格爲空。 cells.size()將是4.接下來的迭代,我得到A4:E4和單元格D4是空的。再次,cells.size()將是4.無法知道哪個單元格丟失。如果A4和D4和E4是空的,cells.size()將是2.

如何獲得它返回5個單元而不管空單元?

回答

3

我已經涉足了Sheetsv4,這確實是當您讀取一系列含空數據的單元格時的行爲。看來這是它設計的方式。如Reading data docs中所述:

空的尾隨行和列被省略。

因此,如果您可以找到一種方法來編寫代表「空值」的字符,如零,那麼這將是一種方法。

1

我解決這個問題的方法是將值轉換成熊貓數據框。我在我的Google表格中提取了我想要的特定列,然後將這些值轉換爲Pandas數據框。一旦我將我的數據集轉換爲Pandas數據框,我做了一些數據格式化,然後將數據框轉換回列表。通過將列表轉換爲Pandas數據框,每列都被保留。熊貓已經爲空的尾隨行和列創建空值。不過,我還需要使用空值轉換非結尾行以保持一致性。

# 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()