Trying to do batch update to Google spreadsheet using gdata python libraries
Asked Answered
M

0

7

I have been trying to figure this out for a while now and just dont seem to be able to break through so hopefully someone out there has done this before.

My issue is that I am trying to do a batch update of a google spreadsheet using the gdata python client libraries and authenticating via oauth2. I have found an example of how to do the batch update using the gdata.spreadsheet.service module here: https://code.google.com/p/gdata-python-client/wiki/UsingBatchOperations

However that does not seem to work when authenticating via oauth2 and so I am having to use the gdata.spreadsheets.client module instead as discussed in this post: https://code.google.com/p/gdata-python-client/issues/detail?id=549

Using the gdata.spreadsheets.client module works for authentication and for updating the sheet however batch commands does not seem to work. Below is my latest variation of the code which is about the closest I have got. It seems to work but the sheet is not updated and the batch_status returned is: 'Insert not supported on batch.' (Note: I did try modifying the batch_operation and batch_id parameters of the CellEntries in the commented out code but this did not work either.)

Thanks for any help you can provide.

    import gdata
    import gdata.gauth
    import gdata.service
    import gdata.spreadsheets
    import gdata.spreadsheets.client
    import gdata.spreadsheets.data

    token = gdata.gauth.OAuth2Token(client_id=Client_id,client_secret=Client_secret,scope=Scope,
                                        access_token=ACCESS_TOKEN, refresh_token=REFRESH_TOKEN,
                                        user_agent=User_agent)

    client = gdata.spreadsheets.client.SpreadsheetsClient()
    token.authorize(client)
    range = "D6:D13"

    cellq = gdata.spreadsheets.client.CellQuery(range=range, return_empty='true')
    cells = client.GetCells(file_id, 'od6', q=cellq)

    objData = gdata.spreadsheets.data
    batch = objData.BuildBatchCellsUpdate(file_id, 'od6')

    n = 1
    for cell in cells.entry:
        cell.cell.input_value = str(n)
        batch.add_batch_entry(cell, cell.id.text, batch_id_string=cell.title.text, operation_string='update')
        n = n + 1
    client.batch(batch, force=True)
Mckale answered 12/12, 2013 at 20:17 Comment(2)
I managed to figure this out and updated the code above to reflect the changes in case this helps anyone else.Mckale
This is awesome, I can finally write to v3 spreadsheets!Ambie

© 2022 - 2024 — McMap. All rights reserved.