2017-02-17 16 views
1

私はプログラミングの初心者です。私はGFSreadsheetsで同様の効果を達成しようとしています。これは、.xlsファイル(openpyxlライブラリ)で実現しました。これは、単純なリマインダーボットの一部であり、.xlsやスプレッドシートの日付の7日前にリマインダー(Slackチャンネル)に通知します。 Excelの例と私のコードサンプル:私はGSpreadアクションにコードを変更することができたGoogleスプレッドシートの反復処理 - ループの作成方法

def excel_check(): 
zakres = datetime.timedelta(days = 7) 
dzisiaj = (datetime.date.today() + zakres) 
miesiac = dzisiaj.month 
rok = dzisiaj.year 
dzien = dzisiaj.day 
data_check = datetime.datetime(rok, miesiac, dzien, 0, 0, 0) 

wb = load_workbook(filename = "daty.xlsx", data_only = True) 
ws = wb.get_sheet_by_name("sheet1") 

cell_range = ws["B2":"B25"] 
for row in cell_range: 
     for cell in row: 
      if cell.value == data_check: 
       imie = ws.cell(row=cell.row, column=1).value 
       dzial = ws.cell(row=cell.row, column=3).value 
       typ_umowy = ws.cell(row=cell.row, column=4).value 
       przelozony = ws.cell(row=cell.row, column=5).value 
AND HERE WE'RE PERFORMING SLACK/API MESSAGE WITH STRINGS ABOVE (imie, dzial, typ_umowy) 

def excel_check(): 
zakres = datetime.timedelta(days = 7) 
dzisiaj = (datetime.date.today() + zakres) 
miesiac = dzisiaj.month 
rok = dzisiaj.year 
dzien = dzisiaj.day 
data_check = datetime.datetime(rok, miesiac, dzien, 0, 0, 0) 

scope = ["https://spreadsheets.google.com/feeds"] 
credentials = ServiceAccountCredentials.from_json_keyfile_name("validcredentialsitworks", scope) 
gc = gspread.authorize(credentials) 
wks = gc.open_by_url("myurl").sheet1 

cell_range = wks.range("B2:B25") 
for row in cell_range: 
     for cell in row: 
      if cell.value == data_check: 
       imie = wks.cell(row=cell.row, column=1).value 
       dzial = wks.cell(row=cell.row, column=3).value 
       typ_umowy = wks.cell(row=cell.row, column=4).value 
AND HERE WE'RE PERFORMING SLACK/API MESSAGE WITH STRINGS ABOVE (imie, dzial, typ_umowy) 

しかし残念ながら、それは上記のExcelの一部のように作用していないが(Excelが一部の送信しますスラックへの適切なメッセージ、GSpreadの部分はありません)。私は、エラーメッセージを持っている:

TypeError: 'Cell' object is not iterable 

あなたが私にヒントを与えてくださいでしたそれはおそらく構文と間違って何かが、私は何を見つけることができません:(

では?短い、同等のものです:?GSpreadで

for row in cell_range: 
    for cell in row: 
     print cell.value 

+0

あなた質問には答えましたが、私はあなたの変数の名前をちょっと残しておきたいと思います。 –

答えて

0

は、Googleを使用したいですあなたのデータを上記のスクリプトに渡すためのシートAPI。私は容易に自分のデータを取得するためにthese simple stepsに続いた。コードの残りの部分は同じままにする必要があります。

This is a link to my post私は自分のスプレッドシートのデータを解析しました。あなたが助けを必要とするなら、それを参照することができます。

+0

あなたの答えをありがとう。編集した質問を見てください(私はいくつかのコードを追加しました)。私は自分のGspreadsheetに接続することができますが、残りのコードはExcelの部分のように機能しません。エラーメッセージ:TypeError: 'Cell'オブジェクトは反復可能ではありません。 – krzostrowski

+0

[this](https://github.com/burnash/gspread)を読んでください。 cell_rangeを出力し、リストの要素が何であるかを確認し、それに応じて繰り返します。私はGspreadを個人的に使っていません。 –

0

It's probably something wrong with the syntax, but I can't find out what :(

gspread docsから、rangeメソッドは行のリストではなくセルのリストを返します。そのため、あなたが言及した間違いがあります:実際にはセルであるrowを繰り返すことはできません。

with open('wks.csv', 'wb') as out: 
    out.write(wks.export(format='csv')) 

をして、csvファイルを反復処理: -

あなただけそれからの読み込み、スプレッドシートへの書き込みをしていない場合、私はそれが最初のCSVする荷重を勧告することができる

import unicodecsv 

with open('wks.csv', "rb") as csv_file: 
    csv_reader = unicodecsv.reader(csv_file, encoding='utf-8', delimiter=',')