Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Google工作表中迭代-如何创建循环?_Python_Google Sheets_Gspread - Fatal编程技术网

Python 在Google工作表中迭代-如何创建循环?

Python 在Google工作表中迭代-如何创建循环?,python,google-sheets,gspread,Python,Google Sheets,Gspread,我是个编程新手。我正试图在Google工作表中实现与使用.xls文件(使用openpyxl库)实现的效果类似的效果。这只是简单提醒机器人的一部分,它在.xls或Sheets中找到的日期前七天发布提醒(到Slack channel) 我的Excel示例代码示例: def excel_check(): zakres = datetime.timedelta(days = 7) dzisiaj = (datetime.date.today() + zakres) miesiac = dzisiaj.m

我是个编程新手。我正试图在Google工作表中实现与使用.xls文件(使用openpyxl库)实现的效果类似的效果。这只是简单提醒机器人的一部分,它在.xls或Sheets中找到的日期前七天发布提醒(到Slack channel)

我的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

您希望使用google sheets API将数据传递到上述脚本。我跟着他们很容易地得到我的数据。一旦你知道了,剩下的代码应该保持不变


在那里我解析了电子表格中的数据。如果您需要帮助,可以参考它。

您希望使用google sheets API将数据传递到上述脚本。我跟着他们很容易地得到我的数据。一旦你知道了,剩下的代码应该保持不变

在那里我解析了电子表格中的数据。如果你需要帮助,你可以参考它

可能是语法有问题,但我找不出来 什么:(

在range方法中,返回的是单元格列表,而不是行列表。这就是您提到的一个错误的原因:您无法遍历实际为单元格的

如果您没有向电子表格中写入数据,请仅从中读取数据-我建议您首先将其加载到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=',')
可能是语法有问题,但我找不出来 什么:(

在range方法中,返回的是单元格列表,而不是行列表。这就是您提到的一个错误的原因:您无法遍历实际为单元格的

如果您没有向电子表格中写入数据,请仅从中读取数据-我建议您首先将其加载到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=',')

我的做法如下:

for r in range(1,sheet.row_count - 1):
    row = sheet.row_values(r)
这将为工作表中的每一行打印一个列表。因此,您可以在以下内容之后添加代码:

    if row[0] == 'January':
        sheet.delete_row(r)

我知道这不是你问题的完整答案,但也许这就足够开始了。

我这样做的方式如下:

for r in range(1,sheet.row_count - 1):
    row = sheet.row_values(r)
这将为工作表中的每一行打印一个列表。因此,您可以在以下内容之后添加代码:

    if row[0] == 'January':
        sheet.delete_row(r)

我知道这不是你问题的完整答案,但也许这就足够开始了。

谢谢你的回答。请看编辑后的问题(我添加了一些代码)。我可以连接到我的Gspreadsheet,但其余代码的性能与Excel部分不一样。有一条错误消息:TypeError:“Cell”对象不可编辑。请通读。打印您的Cell\u范围,查看列表中的元素并进行相应的迭代。我没有亲自使用Gspread。谢谢您的回答。请查看编辑后的问题(我添加了一些代码)。我可以连接到我的Gspreadsheet,但其余代码的性能与Excel部分不一样。有一条错误消息:TypeError:“Cell”对象不可编辑。请通读。打印您的Cell\u范围,查看列表中的元素并进行相应的迭代。我没有亲自使用Gspread。您的问题已得到回答,但我建议你把你的变量命名得更好一点,如果没有,请评论代码是什么。你的问题已经回答了,但我建议你把你的变量命名得更好一点,如果没有,请评论代码是什么。