1

1つのスプレッドシートドキュメント内に2つのGoogleスプレッドシートがあります。最初の名前のリストがあります。各行は一意の名前に対応しています。

2番目のドキュメントは、最初のドキュメントの転置を表示します。これは、ドキュメント1で行ごとにリストされていた名前が、列見出しとして表示されることを意味します。私は次の方程式を使用してこれを達成します:

=TRANSPOSE(FirstSheetName!A2:$A)

私のPythonコードでは、次のように2番目のシートから行リストを読み取ろうとしています。

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ドライブの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 に答える