Gre*_*gMa 13 google-sheets google-sheets-api
我有一个googlesheet,其中列可能不包含任何信息.在遍历行并查看该列时,如果列为空,则不会返回任何内容.更糟糕的是,如果我得到一个完整的行并包括那个常见的,比如获得5列,当任何列为空时,我只返回4列.如果我得到一行列并且列中的一个单元格为空,如何返回NULL或空字符串?
// 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);
Run Code Online (Sandbox Code Playgroud)
我在行中得到了5个单元格.cells.size()应该总是返回五.但是,如果5个细胞中的任何一个是空白的,它将返回更少的细胞.假设只有B3的单元格为空.cells.size()将为4.下一次迭代,我得到A4:E4,单元格D4为空.同样,cells.size()将是4.无法知道哪个单元格丢失.如果A4和D4和E4为空,则cells.size()将为2.
无论空单元格如何,如何让它返回5个单元格?
我在使用 Sheets api V4 时遇到了同样的问题,但能够使用范围末尾的额外列和参数来解决此valueRenderOption问题values.getAPI
给定三列 A、B 和 C,其中任何列都可能包含空值,添加附加列 D 并在此处添加任意值,例如“空白”。
确保捕获范围内的新列并添加附加参数,
valueRenderOption: 'FORMATTED_VALUE'。
您最终应该会收到类似于以下内容的调用:
sheets.spreadsheets.values.get({
spreadsheetId: SOME_SHEET_ID,
range: "AUTOMATION!A:D",
valueRenderOption: 'FORMATTED_VALUE'
}, (err, res) => {})
Run Code Online (Sandbox Code Playgroud)
然后,这将为每个值提供一个一致长度的数组,并在空单元格值的位置返回一个空白字符串“”。
小智 8
我解决这个问题的方法是将值转换为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 = df.replace([''], [None])
#convert back to list to insert into Redshift
processed_dataset = df_replace.values.tolist()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5289 次 |
| 最近记录: |