2016-07-18 4 views
5

У меня есть googlesheethe, где столбец не может содержать никакой информации. Итерируя по строкам и глядя на этот столбец, если столбец пуст, он ничего не возвращает. Хуже того, если я получу полную строку и включу в нее общий, скажем, получите 5 столбцов, я получаю только 4 столбца, когда любой из столбцов пуст. Как вернуть NULL или пустую строку, если я получаю строку столбцов, а одна из ячеек в столбце пуста?Googlesheet 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 пуста. Опять же, cell.size() будет 4. Без возможности узнать, какая ячейка отсутствует. Если A4 и D4 и E4 пустые, cell.size() будет равен 2.

Как получить его, чтобы вернуть 5 ячеек независимо от пустых ячеек?

ответ

3

Я пробовал в Sheetsv4, и это действительно поведение, когда вы читаете диапазон ячеек с пустыми данными. Кажется, так оно и было спроектировано. Как указано в документе Reading data docs:

Пустые завершающие строки и столбцы опущены.

Так что если вы можете найти способ записи символа, который представляет «пустые значения», как нуль, то это будет один из способов сделать это.

1

Как я решил эту проблему, было преобразование значений в кадр данных Pandas. Я отобрал конкретные столбцы, которые я хотел в своих Google Таблицах, а затем преобразовал эти значения в кадр данных Pandas. Как только я преобразовал свой набор данных в кадр данных 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()