1

我在一个电子表格文档中有两个 Google 电子表格。第一个有一个名称列表。每行对应一个唯一的名称。

第二个文档显示第一个文档的转置。这意味着在文档一中逐行列出的名称现在显示为列标题。我使用以下等式实现了这一点:

=TRANSPOSE(FirstSheetName!A2:$A)

在我的 python 代码中,我尝试从第二张表中读取行列表,如下所示:

spr_client = gdata.spreadsheet.service.SpreadsheetsService()

worksheets_feed = ... # obtain feed of worksheets
sheet_id = get_sheet_id('SecondSheetName') # method for retrieving the sheet id
sheet_feed = spr_client.GetListFeed(SPREADSHEET_KEY, sheet_id)

但是,当我尝试遍历列表时,我看到了意想不到的结果。在自定义词典中,我看不到转置的标题,在通过谷歌驱动器 UI 查看工作表时可以看到这些标题。相反,我看到许多带有看起来像散列的随机键的条目。一些例子是:'_cssly'、'_auk5k'、'_a832w'。

sheet_feed.entry[0].custom.keys() # results don't correlate directly with column headings

我的问题是,这些奇怪的键指的是什么?我怎样才能获得他们指向的数据?

4

1 回答 1

1

我有一个非常相似的问题,使用 GetCellsFeed 的提示非常有帮助。

这是我的代码的样子:

import gdata.spreadsheet.service
import datetime
#http://www.payne.org/index.php/Reading_Google_Spreadsheets_in_Python

username = 'username@gmail.com'
passwd = "password"
spreadsheet_id = "xxxxxxx" #take it out of the url between key= and &

# Connect to Google
gd_client = gdata.spreadsheet.service.SpreadsheetsService()
gd_client.email = username
gd_client.password = passwd
gd_client.ProgrammaticLogin()

#Use this snippet to find the worksheet id given the name of the worksheet
feed = gd_client.GetWorksheetsFeed(spreadsheet_id)
for f in feed.entry:
    if f.title.text == "Worksheet Name":
        worksheet_id = f.id.text.rsplit('/',1)[1]
        print f.title.text, worksheet_id
        break

The interesting bit of code!
cells = gd_client.GetCellsFeed(spreadsheet_id,worksheet_id).entry

d = dict()
keys = []
for cell in cells:
    if cell.cell.row == '1':
        keys.append(cell.cell.text)
        d[cell.cell.text] = []
    else:
        k = keys[int(cell.cell.col)-1]
        v = cell.cell.text
        if k == "Date":
            d[k].append(datetime.datetime.strptime(v, '%m/%d/%Y'))
        else:
            d[k].append(int(v))

这将根据第一行和(在这种情况下)整数和日期列表创建一个带有键的字典。如果需要字符串,您也可以使用 float(v) 来表示浮点数,或者只使用 v 。

于 2013-12-09T19:51:39.163 回答