2012-12-26 35 views
1

我在一個電子表格文檔中有兩個Google電子表格。第一個有一個名字列表。每一行對應一個唯一的名稱。當通過轉置獲取列標題時,如何迭代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) 

然而,當我試圖通過列表迭代,我看到意想不到的結果。在自定義字典中,我看不到轉置的標題,這些標題在通過谷歌驅動器UI查看工作表時可見。相反,我看到很多帶有隨機密鑰的條目,看起來像哈希。一些例子是:'_cssly','_auk5k','_a832w'。

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

我的問題是,這些奇怪的鍵是什麼引用?我怎樣才能獲得他們指向的數據?

+0

您是否嘗試過一種細胞飼料而不是列表飼料。我發現Cell feed對於複雜的電子表格數據更好,而List feed可以很好地處理簡單的數據表。 – eddyparkinson

回答

1

我有一個非常類似的問題,並得到了使用GetCellsFeed的提示很大的幫助。

這裏是我的代碼是什麼樣子:

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

username = '[email protected]' 
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。

相關問題