2017-02-17 35 views
1

Я новичок в программировании. Я пытаюсь добиться подобного эффекта в GSpreadsheets, который я достиг с файлом .xls (с библиотекой openpyxl). Это всего лишь часть простого напоминания-бота, который отправляет напоминание (на канал Slack) за 7 дней до даты, найденной в .xls или таблице. Мой пример кода с примером Excel:Итерация через Google Spreadsheet - как создать цикл?

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) 

Я сумел изменить код в действие GSpread:

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 часть отправляет надлежащее сообщение Slack, GSpread часть не). Я получил сообщение об ошибке:

TypeError: 'Cell' object is not iterable 

Это, вероятно, что-то не так с синтаксисом, но я не могу узнать, что :(

Не могли бы вы дать мне подсказку

В? Короче говоря, что это эквивалентно:

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

в GSpread

+0

Ваш на вопрос был дан ответ, но я предлагаю вам назвать ваши переменные немного лучше, и если не прокомментировать код, что это такое. –

ответ

0

Вы хотите использовать Google API листов, чтобы передать ваши данные в вышеупомянутый скрипт. Я последовал за these simple steps, чтобы легко получить мои данные. Как только у вас есть, остальная часть кода останется прежней.

This is a link to my post где я разбирал данные в своей таблице. Если вам нужна помощь, вы можете обратиться к ней.

+0

Спасибо за ваш ответ. Посмотрите отредактированный вопрос (я добавил код). Я могу подключиться к моему Gspreadsheet, но остальная часть кода не работает, как в части Excel. Появляется сообщение об ошибке: TypeError: объект Cell не является итерируемым. – krzostrowski

+0

Прочитайте [это] (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, метод Диапазон возвращает список ячеек, а не список строк. Вот почему вы упомянули ошибку: вы не можете перебирать row, что на самом деле является ячейкой.

Если вы не пишете в электронную таблицу, только чтение из него - я могу рекомендовать загрузку его Csv первым:

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

, а затем итерацию через CSV файл:

import unicodecsv 

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