繁体   English   中英

如何使用其API迭代解析Google电子表格中每个“子工作表”中的数据?

[英]How do I iteratively parse data from each “sub-sheet” in a Google spreadsheet using their API?

语言:Python

我试图遍历Google Spreadsheet中的每个“子工作表”或工作表,并解析其数据。 最终,它将用于创建本地.csv文件。

我尝试使用gspreadgsheets来解决此问题,但是两者都存在身份验证错误,因此我不得不直接使用API​​。


Google Spreadsheets API上的所有示例都从特定范围中获取所有值,如“从工作表Sheet1中的A1:A4行获取所有内容”中所示 这对我不利,因为我的脚本需要遍历电子表格中的许多工作表,因此我正在解析所有数据,而我事先不知道工作表名称。

根据文档,Sheet对象应该有一个“数据”字段,但是我所有的curr_sheet.get('data')解析都返回None: https : //developers.google.com/sheets/api/reference/rest/ v4 /电子表格/表格#Sheet

我要解析的Excel工作表如下所示: https : //i.gyazo.com/62606b2434435d34dd3ba9fbd9825a52.png

    sheet = service.spreadsheets()
    result=sheet.get(spreadsheetId=SPREADSHEET_ID).execute()
    print(result2)
    all_sheets = result.get('sheets')

    for curr_sheet in all_sheets:
        print(curr_sheet)


我需要解析特定行中的单个值,然后在本地将文件另存为.csv 我将问题的范围缩小到遍历特定的工作表,因此,我们将不胜感激任何帮助!

  • 您知道电子表格ID。
  • 您要从电子表格中的所有工作表中检索所有值。
  • 您已经使用过Sheets API。
    • 在API控制台上启用了表格API。
    • 您可以通过OAuth2流程检索访问令牌。

如果我的理解是正确的,那么该修改如何。 请认为这只是几个答案之一。

修改要点:

  • 如果您要使用电子表格result=sheet.get(spreadsheetId=SPREADSHEET_ID, fields='sheets/data').execute()方法检索数据,请将sheets/data添加到诸如result=sheet.get(spreadsheetId=SPREADSHEET_ID, fields='sheets/data').execute()

但我想提出以下流程,因为电子表格.values.batchGet检索的值比电子表格.get方法检索的值更具可读性。

  1. 为了检索所有工作表名称,请使用sheets.get方法。
  2. 为了从工作表中检索所有值,请使用sheets.values.batchGet方法。

通过将两者结合起来,可以检索电子表格中所有工作表的所有值。

修改后的脚本:

sheet = service.spreadsheets()
sheets = sheet.get(spreadsheetId=SPREADSHEET_ID, fields='sheets/properties/title').execute()
ranges = [sheet['properties']['title'] for sheet in sheets['sheets']]
values = sheet.values().batchGet(spreadsheetId=SPREADSHEET_ID, ranges=ranges).execute()
print(values)

结果:

当运行上述脚本时,将返回以下值。

{
    "spreadsheetId":"###",
    "valueRanges":[
        {
            "range":"Sheet1!A1:Z1000",
            "majorDimension":"ROWS",
            "values":[["a1","b1","c1"],["a2","b2","c2"],["a3","b3","c3"]]
        }
        {
            "range":"Sheet2!A1:Z1000",
            "majorDimension":"ROWS",
            "values":[["a1","b1","c1"],["a2","b2","c2"],["a3","b3","c3"]]
        }
        ,
        ,
        ,
    ]
}
  • ["a1","b1","c1"]是第一行。
  • b1是列“ B”。

参考文献:

如果这不是您想要的结果,我深表歉意。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM