teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2020/10/21 06:51

投稿

nto
nto

スコア1438

answer CHANGED
@@ -16,4 +16,57 @@
16
16
  df = pd.read_csv('参照したいcsvパス')
17
17
  # データフレームをスプレッドシートに書き込み
18
18
  set_with_dataframe(wks, df, include_column_header=False)
19
- ```
19
+ ```
20
+
21
+
22
+ ### 追記
23
+ 今回使用されるCSVのデータがどの様なデータなのかわからなかった為
24
+ 恐らくは3列100行分のデータであると仮定して仮のデータを作成して掲示しておりますが
25
+ CSVファイルを使用する場合には、以下の形にご自身で整形して頂く必要があります。
26
+ `[[1列目1行目, 2列目1行目, 3列目1行目], [1列目2行目, 2列目2行目, 3列目2行目], [..], ...]
27
+ `
28
+
29
+ そしたらfor文で1行ずつ処理を行っていきます。
30
+ 何行目から開始し、現在何行目かをカウントする為の変数を用意します。(以下ではcolumと定義)
31
+ 1行ずつ処理を行っていき、指定のセルにデータを1件ずつ挿入していきます。
32
+ また、API側でリクエストを送る(データの挿入等の事)回数に上限が設定されています。
33
+
34
+ - 100秒あたりに100件まで
35
+ - 1回の実行で可能な最大値は1000件まで
36
+ - 1秒10件まで
37
+
38
+ 従って、上限に達しない様に実行速度を調整してあげながら追加する必要があります。
39
+ 今回300件のデータがある為、300秒以上の時間をかけて追加する必要があります。
40
+ 従って3件(1行分)追加したらtime.sleep(3)で3秒休み...という流れで100行分のデータを処理していきます。
41
+ ```python
42
+ import gspread
43
+ from oauth2client.service_account import ServiceAccountCredentials
44
+ from gspread_dataframe import get_as_dataframe, set_with_dataframe
45
+ import pandas as pd
46
+ import numpy as np
47
+ import time
48
+
49
+ scope = ['https://spreadsheets.google.com/feeds',
50
+ 'https://www.googleapis.com/auth/drive']
51
+ credentials = ServiceAccountCredentials.from_json_keyfile_name('jsonファイル名', scope)
52
+ gc = gspread.authorize(credentials)
53
+ SPREADSHEET_KEY = 'スプレッドシートキー'
54
+ # スプレッドシートの指定
55
+ wks = gc.open_by_key(SPREADSHEET_KEY).sheet1
56
+
57
+ # 3列100行分の仮のデータ
58
+ data = [['{}{:05d}'.format(n, i) for i in range(1, 101)] for n in range(1,4)]
59
+ data = np.array(data).T # 転置
60
+
61
+ colum = 5 # 5行目から開始する為
62
+ # 各行ずつB列C列D列の何行目かをformat(colum)で指定してデータを挿入
63
+ for row in data:
64
+ B, C, D = row
65
+ wks.update_acell('B{}'.format(colum), B)
66
+ wks.update_acell('C{}'.format(colum), C)
67
+ wks.update_acell('D{}'.format(colum), D)
68
+
69
+ colum += 1
70
+ time.sleep(3)
71
+ ```
72
+ ※解説としてわかりやすい様に余計な代入や省略できる部分を省略せずに記載しております。