繁体   English   中英

遍历 Google 表格 - 如何创建循环?

[英]Iterate through Google Sheets - how to create a loop?

我是编程的新手。 我试图在 Google Sheets 中实现与我使用 .xls 文件(使用 openpyxl 库)实现的类似效果。 这只是简单的提醒机器人的一部分,它在 .xls 或 Sheets 中找到的日期前 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?

您想使用 Google Sheets API 将您的数据传递给上述脚本。 我按照这些简单的步骤轻松获取我的数据。 一旦你有了,其余的代码应该保持不变。

这是我在我的电子表格中解析数据的帖子的链接 如果需要帮助可以参考。

语法可能有问题,但我不知道是什么:(

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=',')

我这样做的方式如下:

for r in range(1,sheet.row_count - 1):
    row = sheet.row_values(r)

这将为工作表中的每一行打印一个列表。 所以你可以在之后添加代码:

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

我意识到这不是您问题的完整答案,但也许足以开始。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM