2012-12-26 1 views
1

한 스프레드 시트 문서 내에 두 개의 Google 스프레드 시트가 있습니다. 처음에는 이름 목록이 있습니다. 각 행은 고유 한 이름에 해당합니다.트랜스 포즈를 통해 열 제목을 얻은 경우 어떻게 Google 스프레드 시트를 반복합니까?

두 번째 문서는 첫 번째 문서의 조옮김을 표시합니다. 즉, 문서 1에서 행 단위로 나열된 이름이 열 머리글로 표시됩니다. 나는이 목록을 통해 반복 할 때,

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) 

을 그러나 다음과 같이 내가 두 번째 시트에서 행 목록을 읽으려고 내 파이썬 코드에서

=TRANSPOSE(FirstSheetName!A2:$A) 

: 나는 다음과 같은 식을 이용하여이를 달성 예기치 않은 결과가 나타납니다. 사용자 정의 사전에서 Google 드라이브 UI를 통해 시트를 볼 때 볼 수있는 전치 표제는 표시되지 않습니다. 대신 해시처럼 보이는 무작위 키가있는 항목이 많이 있습니다. 예를 들면 '_cssly', '_auk5k', '_a832w'입니다.

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

내 이상한 질문은 무엇입니까? 그리고 그들이 가리키는 데이터를 어떻게 얻을 수 있습니까?

+0

목록 피드가 아닌 셀 피드를 사용해 본 적이 있습니까? 복잡한 스프레드 시트 데이터의 경우 셀 피드가 더 좋으며 간단한 데이터 테이블에서는 목록 피드가 잘 작동합니다. – 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)를 float로 사용하거나 문자열을 원하면 v를 사용할 수도 있습니다.