从google工作表中获取列值大于X的行(来自python api)?

2024-09-30 18:20:48 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种方法可以使用pythonapi从googlesheet获取列值大于X的行

我有一个谷歌表单可以链接到一张工作表。当一个响应被添加到工作表中时,我有一个appscript代码,它将unix毫秒时间戳添加到行中。所以床单看起来像

<default form response metadata headers>...<form response headers>...MSTIMESTAMP
<values>...1234567
<values>...1234568
.
.
.

我想从googlepythonapi客户端访问这张表,只获取我还没有带下来处理的值(即mstimestamp的值大于我在客户端存储的时间戳值)。将最近看到的时间戳保存在API客户端的一个文件中,并使用它来执行一些假设的代码片段,如

latest_ts = get_from_file(latest_timestamp.log)

service = build("sheets", "v4", credentials=creds)
sheet = service.spreadsheets()
result = sheet.values().getBySomeQueryFunction(spreadsheetId=MY_SPREADSHEET_ID
                                               where=f"where MSTIMESTAMP_COLUMN > {latest}").execute()

(顺便说一句,我之所以要使用生成的时间戳而不是保存行号,是因为它不能保证以后不会以随机方式删除行(例如,如果表单对工作表的响应由于某种原因无效))

这样做可能吗?是否有其他方法(基本上是尝试避免将整个工作表带到客户端进行处理)?查看了工作表的^{}文档,但是筛选器参数在这里似乎不相关


Tags: 方法代码form客户端表单pythonapiresponseservice
1条回答
网友
1楼 · 发布于 2024-09-30 18:20:48

您的工作表是否有一些标题来识别列和其他列? 如果您确实有一些头,其中一列称为“timestamp”,那么可以使用library Sheetfu及其表模块。这就是它的工作原理:

from sheetfu import Table

spreadsheet = SpreadsheetApp('path/to/secret.json').open_by_id('<insert spreadsheet id here>')
data_range = spreadsheet.get_sheet_by_name('whatever').get_data_range()

table = Table(data_range)

items_to_process = []
for item in table:
    if item.get_field_value('timestamp') >= 'your timestamp threshold':
        items_to_process.append(item)

items_to_process列表将包含您想要的所有行,您可以使用以下命令访问任何行值:

my_value = item.get_field_value("my_field")

如果您的标题在第一页上,则此代码段将起作用。如果不是,您可以参考Sheetfu文档了解如何执行

相关问题 更多 >