我有一个googlesheet,其中列中可能不包含任何信息。在迭代行和查看该列时,如果该列为空,则不会返回任何内容。更糟糕的是,如果我做了一个整行的获取,并包含了这个常见的,比如get 5列,那么当其中任何一列为空时,我只返回4列。如果得到一行列,而列中的一个单元格为空,如何返回空字符串或空字符串?
// 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。但是,如果5个单元格中的任何一个为空白,则返回的单元格将减少。假设只有B3上的单元格是空的。cells.size()将是4。下一次迭代,我得到A4:E4,单元格D4为空。同样,cells.size()将是4,无法知道缺少哪个单元格。如果A4、D4和E4为空,则cells.size()将为2。
如何使它返回5个单元格而不考虑空单元格?
发布于 2016-07-19 17:41:47
我涉足过Sheetsv4,这确实是在读取包含空数据的一系列单元格时的行为。看来这就是它的设计方式。如读取数据文档所述
省略空尾随行和列。
所以,如果你能找到一种方法来写一个表示“空值”的字符,比如零,那么这就是一种方法。
发布于 2016-11-02 07:50:50
我解决这个问题的方法是将值转换为Pandas数据。我在Google页面中获取了我想要的特定列,然后将这些值转换为Pandas。一旦我把数据集转换成Pandas数据格式,我就做一些数据格式化,然后将数据转换回列表。通过将列表转换为Pandas dataframe,将保留每一列。熊猫已经为空的尾随行和列创建了空值。但是,为了保持一致性,我还需要转换具有空值的非尾随行。
# 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()
发布于 2018-11-20 09:49:38
我在使用sheets的V4时也遇到了同样的问题,但是在范围的末尾使用了一个额外的列和values.get
api的valueRenderOption
参数来解决这个问题。
给定三列,A、B和C,其中任何一列都可能包含空值,添加一个额外的列D,并在这里添加一个任意值,如“空白”。
确保捕获范围内的新列并添加附加参数,
valueRenderOption: 'FORMATTED_VALUE'
。
您应该得到一个类似于以下内容的调用:
sheets.spreadsheets.values.get({
spreadsheetId: SOME_SHEET_ID,
range: "AUTOMATION!A:D",
valueRenderOption: 'FORMATTED_VALUE'
}, (err, res) => {})
这将为每个值提供一个一致的长度数组,在空单元格值的位置返回一个空字符串"“。
https://stackoverflow.com/questions/38442634
复制相似问题