我在一个电子表格文档中有两个Google电子表格。第一个有一个名单。每行对应一个唯一的名称。
第二个文档显示第一个的转置。这意味着在文档1中逐行列出的名称现在显示为列标题。我使用以下等式实现了这一点:
=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)
然而,当我尝试遍历列表时,我看到了意想不到的结果。在自定义词典中,我没有看到转置标题,这些标题在通过Google驱动器用户界面查看工作表时可见。相反,我看到许多带有随机键的条目看起来像哈希。一些例子是:'_ cssly','_ auk5k','_ a832w'。
sheet_feed.entry[0].custom.keys() # results don't correlate directly with column headings
我的问题是,这些奇怪的键引用了什么?我怎样才能获得他们指向的数据?
答案 0 :(得分: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。