我可以先使用gspread更新单元格而不先获取其当前值吗

时间:2019-04-29 08:48:16

标签: python google-sheets-api gspread

我有一个Google工作表,我正在根据我在python脚本中进行的一些API调用的结果来插入/更新的值。

根据gspread文档,我目前正在从工作表中获取范围,然后更新值,然后将其写回。

但是我不在乎表中的值,我宁愿盲目地写它-为我节省了宝贵的API读取配额。

有没有一种方法可以先写入单元格而不先读取它们?

我到处搜索有同样问题的人,但找不到任何可以告诉我如何做到这一点(甚至完全可以做到)的人

当前代码:

(rowData是我之前想在gsheet中写入的python脚本中以前收集的数据)

try:
        rowToUpdate = sheet.range("A"+str(index)+":Q"+str(index))
except Exception as e:
        print("Couldn't fetch rowToUpdate, error message was: ")
        print(repr(e))

try:
        for cell, value in zip(rowToUpdate, rowData):
            cell.value = value
        sheet.update_cells(rowToUpdate)

理想情况下,我只会做类似的事情:

    try:
        for cell, value in zip(rowToUpdate, rowData):
            cell.value = value
        sheet.update_cells(rowToUpdate)```

1 个答案:

答案 0 :(得分:2)

您可以使用Sheetfu库(我是作者)来完成此操作:https://github.com/socialpoint-labs/sheetfu

以下代码将仅在不首先获取值的情况下设置值:

from sheetfu import SpreadsheetApp as sa

spreadsheet = sa('path/to/secret.json').open_by_id('<insert spreadsheet id here>')
sheet = spreadsheet.get_sheet_by_name('<insert the sheet name here>')

# make sure your data is already in a 2D matrix form
input_data = [[1,2], [3,4]]

data_range = sheet.get_range(
    row=1, 
    column=1, 
    number_of_row=len(input_data), 
    number_of_column=len(input_data[0])
)

data_range.set_values(input_data)

此代码将不查询工作表并获取当前值。只会使用您的数据设置值。