2012-10-17 44 views
0

我想更新或插入单元格到谷歌电子表格,这是我第一次使用谷歌API和Python,所以我可能做了点什么东西,但我不能看到它为我的生活。用Gdata,Python插入单元格Google Spreadsheet Api客户端

当我注释掉“batchRequest.AddInsert(newCell)” 但是当它留在我得到一个返回的状态代码500和a时,我的代码更新现有的单元格,但不插入新的单元格(空白单元格保持空白) XML的堆,这是没有多大帮助。

代码(部分)

def setRowEntries(self, cohort_key=None): 
    cohort = self.GetCohort(cohort_key) 

    gd_client = gdata.spreadsheet.service.SpreadsheetsService() 
    gd_client.email = email 
    gd_client.password = password 
    gd_client.source = 'YOUR_APP_NAME' 

    # LOGIN 
    try: 
    # log in 
    gd_client.ProgrammaticLogin() 
    except socket.sslerror, e: 
    logging.error('Spreadsheet socket.sslerror: ' + str(e)) 
    return False 

    # KEY FOR SHEET 
    key = '0At**************************Gc' 

    # LOOKUP FOR WORKSHEET KEY 
    GID_TABLE = { 
    'android_users_by_week_by_registration' : 'od6' 
    } 

    wksht_id ='' 
    wksht_id = GID_TABLE[cohort_key] 

    # create a cells feed and batch request 
    cells = gd_client.GetCellsFeed(key, wksht_id) 
    batchRequest = gdata.spreadsheet.SpreadsheetsCellsFeed() 

    #TODO SET TITLE 

    #resize worksheet 
# cells.col_count = len(cohort[0]) 
# cells.row_count = len(cohort) 

    rowcursor = 0 
    for myrow in cohort: 
    colcursor = 0 
    #print ("row ::"+str(myrow)) 
    for mycell in myrow: 
     #print ("cell::"+str(mycell)) 
     found = 0 
     #print ("try and place"+str(rowcursor)+','+str(colcursor)) 
     for myentry in cells.entry: 
     if ((int(myentry.cell.row) == int(rowcursor+1)) and (int(myentry.cell.col) == int(colcursor+1))): 
      print "updating "+myentry.cell.text+" to "+str(mycell) 
      myentry.cell.inputValue = str(mycell) 
      batchRequest.AddUpdate(myentry) 
      found = 1 

     if not found: 
     print "inserting "+str(mycell)+" at Cell "+ str(rowcursor+1)+'_'+str(colcursor+1) 
     newCell = gdata.spreadsheet.SpreadsheetsCell() 
     newCell.cell = gdata.spreadsheet.Cell(inputValue=str(mycell), text=None, row=str(rowcursor+1), col=str(colcursor+1)) 
     print newCEll.inpu 
     batchRequest.AddInsert(newCell)# the broken part 
     colcursor = colcursor + 1 
    rowcursor = rowcursor + 1 

    updated = gd_client.ExecuteBatch(batchRequest, cells.GetBatchLink().href) 

    if updated: 
    print "Sucessfull!"+str(updated) 
    else: 
    print "Failed!" 

的错误(部分)

type="text">Internal Error</ns0:content><ns1:id xmlns:ns1="http://schemas.google.com/gdata/batch">1626</ns1:id><ns0:title type="text">Error</ns0:title><ns1:status code="500" reason="Internal Error" xmlns:ns1="http://schemas.google.com/gdata/batch" /><ns1:operation type="insert" xmlns:ns1="http://schemas.google.com/gdata/batch" /><ns0:updated>2012-10-17T09:39:18.946Z</ns0:updated></ns0:entry><ns0:entry><ns0:id>1627</ns0:id><ns0:content type="text">Internal Error</ns0:content><ns1:id xmlns:ns1="http://schemas.google.com/gdata/batch">1627</ns1:id><ns0:title type="text">Error</ns0:title><ns1:status code="500" reason="Internal Error" xmlns:ns1="http://schemas.google.com/gdata/batch" /><ns1:operation type="insert" xmlns:ns1="http://schemas.google.com/gdata/batch" /><ns0:updated>2012-10-17T09:39:18.946Z</ns0:updated></ns0:entry><ns0:entry><ns0:id>1628</ns0:id><ns0:content type="text">Internal Error</ns0:content><ns1:id xmlns:ns1="http://schemas.google.com/gdata/batch">1628</ns1:id><ns0:title type="text">Error</ns0:title><ns1:status code="500" reason="Internal Error" xmlns:ns1="http://schemas.google.com/gdata/batch" /><ns1:operation type="insert" xmlns:ns1="http://schemas.google.com/gdata/batch" /><ns0:updated>2012-10-17T09:39:18.946Z</ns0:updated></ns0:entry><ns0:entry><ns0:id>1629</ns0:id><ns0:content type="text">Internal Error</ns0:content><ns1:id xmlns:ns1="http://schemas.google.com/gdata/batch">1629</ns1:id><ns0:title type="text">Error</ns0:title><ns1:status code="500" reason="Internal Error" xmlns:ns1="http://schemas.google.com/gdata/batch" /><ns1:operation type="insert" xmlns:ns1="http://schemas.google.com/gdata/batch" /><ns0:updated>2012-10-17T09:39:18.946Z</ns0:updated></ns0:entry><ns0:entry><ns0:id>1630</ns0:id><ns0:content 

我发现谷歌的API文档很难理解和实例少而过于狭窄范围的。如果你可以让我知道什么即时做错了,这将是伟大的

回答

2

原因变得清晰,当查看铬中的XML插入不支持批处理,看起来像新的单元格必须通过工作表饲料。

+3

如果你厌倦了使用官方API检查出[库](https://github.com/burnash/gspread/),我一年前就入侵过了。我试图尽可能简化API。 – Burnash

相关问题