使用Google Sheets API导入Excel数据出现空白列如何解决
核心问题原因
Excel中Range.CurrentRegion会返回和指定单元格相连的整个连续数据矩形区域,不会因为你指定C1为起点就只返回C列及之后的内容。如果你的原Excel数据是从A列开始的连续区域,此时rngData里会包含A、B列的完整内容,你再把整份数据写入Google Sheet的C1位置,就会导致Google Sheet的A、B列为空白,原Excel内容整体右移两列,也就是你看到的两列空白列。
解决方案
根据你的需求可以选择以下任意一种方案:
方案1:完全对齐原Excel结构写入
如果需要Google Sheet内容和原Excel完全一致,直接修改读取和写入的起始位置即可:
# 直接读取原Excel完整的连续区域 rngData = ws.Range('A1').CurrentRegion() # 写入到Google Sheet的A1起始位置,结构就和原Excel完全匹配 response = drive_service.spreadsheets().values().append( spreadsheetId=gsheet_id, valueInputOption='RAW', range='A1', body=dict( majorDimension='ROWS', values=rngData ) ).execute()
方案2:仅导入原Excel C列及之后的内容
如果只需要导入原Excel C列开始的内容,修改读取Excel的代码,不要用CurrentRegion,直接指定要读取的列范围,或者对读取到的数组做切片过滤:
rngData = ws.Range('C1').CurrentRegion() # 切片去掉每行前两列(A、B列)的内容 filtered_data = [row[2:] for row in rngData] response = drive_service.spreadsheets().values().append( spreadsheetId=gsheet_id, valueInputOption='RAW', range='A1', # 从Google Sheet第一列开始写入过滤后的数据 body=dict( majorDimension='ROWS', values=filtered_data ) ).execute()
方案3:对已导入的数据批量删除空白列
如果数据已经导入到Google Sheet,可以调用batchUpdate接口直接删除空白列:
batch_request = { "requests": [ { "deleteDimension": { "range": { "sheetId": 0, # 默认第一个工作表的id为0,其他sheet请替换为对应id "dimension": "COLUMNS", "startIndex": 0, "endIndex": 2 # 左闭右开,删除索引0、1对应的A、B两列 } } } ] } response = drive_service.spreadsheets().batchUpdate( spreadsheetId=gsheet_id, body=batch_request ).execute()
内容的提问来源于stack exchange,提问作者Dess
相关产品推荐
相关产品推荐

