【问题标题】:updating spreadsheet using gdata python api使用 gdata python api 更新电子表格
【发布时间】:2014-10-01 02:39:32
【问题描述】:

首先阅读最后的更新 这是我的代码:

spreadsheet_key = "0AhBYO002ygGgdDZQTW5pTVhLdjM4NlhHbXJ1cVRCd3c"
worksheet_id = "od6"
spr_client = gdata.spreadsheet.service.SpreadsheetsService()
spr_client.email = 'myemail@gmail.com'
spr_client.password = '<pwd>'
spr_client.source = 'Example Spreadsheet Writing Application'
spr_client.ProgrammaticLogin()

dicti = {}
dicti['Name'] = 'A'
dicti['Metric Name'] = 'A2' 
dicti['Completed Units'] = 10
dicti['Team Size'] = 2
entry = spr_client.InsertRow(dicti, spreadsheet_key, worksheet_id)

每次我运行此代码时,最后一次都会出现此错误:

'int' object has no attribute 'decode'

请告诉我应该怎么做……

这就是 InsertRow 函数出现错误的地方:

/usr/local/lib/python2.7/site-packages/gdata/spreadsheet/service.py in InsertRow
      new_custom.column = k
      new_custom.text = v
      new_entry.custom[new_custom.column] = new_custom
    # Generate the post URL for the worksheet which will receive the new entry.
    post_url = 'https://spreadsheets.google.com/feeds/list/%s/%s/private/full'%(
        key, wksht_id) 
    return self.Post(new_entry, post_url, 
        converter=gdata.spreadsheet.SpreadsheetsListFromString) 

更新:将此代码修复后:

dicti = {}
dicti['Name'] = 'A'
dicti['Metric Name'] = 'A2' 
dicti['Completed Units'] = '10'
dicti['Team Size'] = '2'

我现在收到此错误:

{'status': 400, 'body': 'Attribute name &quot;Name&quot; associated with an element type &quot;ns1:Metric&quot; must be followed by the &#39; = &#39; character.', 'reason': 'Bad Request'}

【问题讨论】:

    标签: python gdata google-spreadsheet-api


    【解决方案1】:

    您需要在使用 gdata API 时写入字符串值,因此您的“团队规模”和“已完成单位”变量将导致错误,除非将它们转换为字符串。此外,您应该注意,API 引用的列名不保留您的大小写等(您的Metric Name 列需要称为metricname)。因此,您还必须更改它们在字典中的显示方式(请注意,这假设您的列标题已经存在,因为 API 需要知道如何编写字典):

    dicti = {}
    dicti['name'] = 'A'
    dicti['metricname'] = 'A2' 
    dicti['completedunits'] = '10'
    dicti['teamsize'] = '2'
    entry = spr_client.InsertRow(dict, spreadsheet_key, worksheet_id)
    

    作为旁注(因为这让我有点不知所措),在使用 CellQuery 对象并为范围声明 maxmin 值时也是如此。希望这有助于避免一些混乱:)

    【讨论】:

    • @RacketDonkey 非常感谢我现在得到了这个错误:{'status': 400, 'body': 'Attribute name "Name"与元素类型“ns1:Metric”相关联。后面必须跟 ' = ' character.', 'reason': 'Bad Request'} 你能帮帮我吗...我已经失眠了太久试图让它工作.. :(
    • @AniqueAkhtar 查看错误代码,您是否有机会使用 XML 为字典赋值?
    • 不...我正在硬编码...就像我向您展示的方式一样...但我使用的是 Django...
    • 实际上,您的entry 变量是否与所写的完全一致?您在InsertRow() 调用中指的是dict,但在上面将字典定义为dicti
    • 抱歉打错字了...在我的代码中是 dicti...我没有在代码中的任何地方使用过 dict 等待您的回答...
    【解决方案2】:

    您只需要在您的:

    中输入列名
    Spreadsheet('name','metricname','completedunits','teamsize')
    

    您可以阅读更多关于它的信息here

    【讨论】:

      猜你喜欢
      • 2012-05-23
      • 2012-07-10
      • 1970-01-01
      • 1970-01-01
      • 2012-07-27
      • 2011-11-05
      • 2013-12-13
      • 2011-06-11
      • 1970-01-01
      相关资源
      最近更新 更多