我是编程新手。我试图在GSpreadsheets中实现类似的效果,我用.xls文件(使用openpyxl库)实现了。这只是简单提醒机器人的一部分,它在.xls或电子表格中找到日期前7天发布提醒(对Slack频道)。 我的代码示例使用Excel示例:
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我在电子表格中解析了数据。如果您需要帮助,可以参考它。
答案 1 :(得分:0)
语法可能有问题,但我无法找到答案 什么:(
从gspread docs,range方法返回单元格列表,而不是行列表。这就是为什么你提到的错误:你不能遍历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=',')
答案 2 :(得分:0)
我的操作方式如下:
for r in range(1,sheet.row_count - 1):
row = sheet.row_values(r)
这将打印出工作表中每一行的列表。因此,您可以在以下位置添加代码:
if row[0] == 'January':
sheet.delete_row(r)
我意识到这不是您所提问题的完整答案,但也许足以开始使用。