2017-01-24 3 views
0

でGoogleスプレッドシートにCSVファイルからデータを解析します。しかし私は、私は完全にGoogleスプレッドシートにCSVファイルからフォーマット/パースデータについて迷ってしまいました、基礎の明確な理解がこのプロジェクトのために必要な持っているんだ(私はまだのpythonを学んでいます!)。だからここは、私はGoogleスプレッドシートにCSVファイルからデータを送信するためにPythonスクリプトを書いているのpython

は、私のコードの最初の部分である:

def add_todo(): 

    credentials = get_credentials() 
    http = credentials.authorize(httplib2.Http()) 
    discoveryUrl = ('https://sheets.googleapis.com/$discovery/rest?' 
        'version=v4') 
    service = discovery.build('sheets', 'v4', http=http, 
           discoveryServiceUrl=discoveryUrl) 

    spreadsheetId = 'spreadsheetidhere' 
    rangeName = 'A1:A' 
    # https://developers.google.com/sheets/guides/values#appending_values 
    values = {'values':[['Hello Saturn',],]} 
    result = service.spreadsheets().values().append(
     spreadsheetId=spreadsheetId, range=rangeName, 
     valueInputOption='RAW', 
     body=values).execute() 

if __name__ == '__main__': 
    add_todo() 

私はそれを自分で書いていないし、それが完璧に働いています。

はここに私のコードの2番目の部分です:それはまた、私は本当に私は自分のコードの最初の部分でそれをミックスする方法を知っていなくても、正常に動作しています

test = [] 
with open('data.csv', 'rb') as f: 
    reader = csv.reader(f) 
    for row in reader: 
      test.append(row) 

。あなたは私の主な関心事は、私はこのような何かをやってみたかったvalues = {'values':[['Hello Saturn',],]}

値スプレッドシートにtest配列からデータを渡すために進むべきかを推測することができたよう

test = [] 

def add_todo(): 
    with open('snap.csv', 'rb') as f: 
     reader = csv.reader(f) 
     for row in reader: 
       test.append(row) 
    credentials = get_credentials() 
    http = credentials.authorize(httplib2.Http()) 
    discoveryUrl = ('https://sheets.googleapis.com/$discovery/rest?' 
        'version=v4') 
    service = discovery.build('sheets', 'v4', http=http, 
           discoveryServiceUrl=discoveryUrl) 

    spreadsheetId = '1UJGs-gJCIUDv5jg5-p0MPEqsokYu5k2MfJ8A5oBkpWs' 
    rangeName = 'A1:A' 

    # https://developers.google.com/sheets/guides/values#appending_values 
    values = {'values':[['Hello Saturn',],]} 
    result = service.spreadsheets().values().append(
     spreadsheetId=spreadsheetId, range=rangeName, 
     valueInputOption='RAW', 
     body=values).execute() 

if __name__ == '__main__': 
    add_todo() 

:私はこれをやりました: values = {'values':[test]}しかし、明らかに動作しません。私は完全にarraylist、JSON形式の間で迷ってしまいました

data1 data2 data3 data4 //col name 
value1x value2x value3x value4x //row1 
value1y value2y value3y value4y //row2 
etc... 

:ここ

data1,data2,data3,data4,... 
value1x,value2x,value3x,value4x,... 
value1y,value2y,value3y,value4y,... 
value1z,value2z,value3z,value4z,... 

そして、私は私のスプレッドシートに何をしたいです:

は、ここに私のcsvファイルで、要約すると。

答えて

1

あなたは、メインのAPI呼び出しでrangeパラメータとbodyを指定する必要があります。あなたはAPI documentationを見れば、あなたはbodyニーズがある次のような形式

values = [ 
    [ 
     # Cell values ... 
    ], 
    # Additional rows ... 
] 
body = { 
    'values': values 
} 

、リストのリストがある一つの要素valuesと辞書を持っていることがわかります。 CSVデータを含むtest変数はリストのリストとして既に表示されています。 APIのPythonインターフェースは自動的にPythonの辞書とリストをJSONに変換するので、ここでJSONについて心配する必要はありません。 rangeパラメータは少し厄介ですが、シートの名前を使用しているドキュメントに基づいて、そのシートの最後に値を追加します。だから、上記をまとめると、あなたのコードは次のようになるかもしれません(私はそれをテストしていません):

def add_todo(): 
    test = [] # test should be initialized in the function body 
    with open('snap.csv', 'rb') as f: 
     reader = csv.reader(f) 
     for row in reader: 
       test.append(row) 
    credentials = get_credentials() 
    http = credentials.authorize(httplib2.Http()) 
    discoveryUrl = ('https://sheets.googleapis.com/$discovery/rest?' 
        'version=v4') 
    service = discovery.build('sheets', 'v4', http=http, 
           discoveryServiceUrl=discoveryUrl) 

    spreadsheetId = '1UJGs-gJCIUDv5jg5-p0MPEqsokYu5k2MfJ8A5oBkpWs' 

    # https://developers.google.com/sheets/guides/values#appending_values 
    values = {'values': test} 
    result = service.spreadsheets().values().append(
     spreadsheetId=spreadsheetId, range=spreadsheetId, 
     valueInputOption='RAW', 
     body=values).execute() 

if __name__ == '__main__': 
    add_todo() 
関連する問題