【发布时间】:2020-07-14 10:11:18
【问题描述】:
我需要通过 Gspread 从 Google Docs 下载一个 Excel 表格,然后我需要多次读取 'A1' 表示法中不同单元格的值。因此,我不能只获取电子表格然后调用val = worksheet.acell('B1').value,因为脚本会因过多的 API 调用而冻结。我现在的解决方案:
def download_hd_sheet():
worksheet = gc.values().get(spreadsheetId=excel_id, range='variables', valueRenderOption='FORMULA').execute()['values']
df = pd.DataFrame(worksheet)
writer = pd.ExcelWriter("Variables.xlsx", engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1', index=False, header=False)
workbook = writer.book
worksheet = writer.sheets['Sheet1']
writer.save()
book = openpyxl.load_workbook('Variables.xlsx', data_only=False)
global hd_sheet
hd_sheet = book.active
到目前为止,我正在做的是:
- 我从工作表下载值。
- 将其(列表列表)转换为 pandas 数据框。
- 然后我将 df 写入 .xlsx 文件。
- 我将 .xlsx 文件读取到全局变量中
在我看来,我做这么多事情只是为了实现可以分两行完成的事情。请让我知道什么比上述更有效。
【问题讨论】:
-
虽然我不确定我是否能正确理解您的目标,但在您的情况下,例如,通过使用 Drive API 转换直接将 Google 电子表格下载为 XLSX 文件怎么样?如果这不是您期望的方向,我深表歉意。
-
@Tanaike 我的意思是 - 我认为我实际上根本不需要将工作表写入文件。我想做的是获取谷歌表并将其分配给一个对象,这样我在获取单元格的值时就不必进行太多的 API 调用。如果这样的解决方案是不可能的,我真的需要将它写入一个文件 - 请告诉我如何立即下载 XLSX 文件?
-
感谢您的回复。根据您的回复,我提出了一个示例脚本作为答案。你能确认一下吗?如果我误解了您的目标并且这不是您期望的方向,我深表歉意。
-
我的回答是否向您展示了您想要的结果?你能告诉我吗?这对我学习也很有用。如果这可行,与您有相同问题的其他人也可以将您的问题作为可以解决的问题。如果您对我的回答有疑问,我深表歉意。到时候,可以问一下你现在的情况吗?我想学习解决你的问题。
标签: python excel google-sheets google-sheets-api gspread