在gdata.spreadsheets.client.SpreadsheetsClient()[Python]中使用GetSpreadsheets()查询特定的电子表格

时间:2014-12-09 17:03:46

标签: python google-sheets

我知道如何使用gdata.spreadsheet.service.SpreadsheetsService()查找电子表格的ID,但我无法弄清楚如何通过gdata.spreadsheets.client.SpreadsheetsClient()获取ID,我很遗憾不得不将其用于OAuth2凭据。 [Related post on SpreadsheetsService not supporting OAuth2.]

鉴于完全授权的电子表格客户端:

  • ssClient = gdata.spreadsheets.client.SpreadsheetsClient()
    

我可以使用以下代码获得预期的工作表ID:

  • ws_name      = 'My Worksheet'
    q            = gdata.spreadsheets.client.WorksheetQuery (ws_name, 'true')
    ws           = ssClient.GetWorksheets(spreadsheet_id, query=q)
    worksheet_id = ws.entry[0].id.text.rsplit('/',1)[1]
    

但我无法弄清楚如何获取我感兴趣的特定电子表格的电子表格ID('doc_name')。我这样做是为了访问表格:

  • q    = gdata.spreadsheets.client.SpreadsheetQuery (doc_name, 'true')
    feed = ssClient.GetSpreadsheets(query=q)
    
    # this works fine as long as CLIENT_EMAIL is an authorized editor
    spreadsheet_id = feed.entry[0].id.text.rsplit('/',1)[1]
    

但有人可以告诉我如何从GetSpreadsheets()返回的对象中获取电子表格ID吗?

由于

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题并最终弄明白了:见下文:


    sps = gd_client.GetSpreadsheets()
        print (len(sps.entry)) # shows how many spreadsheets you've got
        squery = gdata.spreadsheets.client.SpreadsheetQuery (title="TEST2", title_exact=True)
        sfeed = gd_client.get_spreadsheets(query = squery)

        print(sfeed.entry[0].id.text.rsplit('/',1)[1])

答案 1 :(得分:0)

感谢user4426017,我终于弄明白了。要从feed获取电子表格ID,GetSpreadsheets()按照建议返回的对象,我需要做的就是添加:

  • spreadsheet_id = feed.entry[0].id.text.rsplit('/',1)[1]
    

实际问题并不像我想象的那么险恶,与gdata.spreadsheet.service.SpreadsheetsService()gdata.spreadsheets.client.SpreadsheetsClient()之间的区别无关,只是权限问题。

我们的电子表格已经过配置,只有拥有该链接的用户才能进行编辑,所以当我在实施OAuth2之前进行测试时,我是通过在我的Google云端硬盘中有链接的帐户进行的。当我开始使用Google Dev Console中的CLIENT_EMAIL进行测试时,该表单根本不在其驱动器列表中,因此无法在工作表列表中找到它。一旦我打印了ssClient.GetSpreadsheets() 返回的对象而没有 文档查询,我就发现了这一点,并看到了零文档。

由于权限设置为允许任何拥有该链接的人进行编辑,因此对电子表格ID进行硬编码工作正常。

所以最重要的是,我需要做的就是邀请CLIENT_EMAIL成为文档的编辑者,然后从Feed中提取ID的行完美无缺!