如何在 gspread 中预定义行数和列数

How to predefined number of rows and cols within gspread

我确实有一个 已删除 数据,我每天用它覆盖 google sheet。

我无法找到可以为现有 google sheet.

设置行数和列数的选项

我注意到根据 documentation 只能对新创建的 sheet 执行此操作,但我不知道如何对现有的 sheet!

执行此操作
def api(key):
    myfilt = [list of lists]
    columns = [name of columns]
    gc = gspread.service_account(filename='Auth.json')
    sh = gc.open_by_key(key)
    worksheet = sh.sheet1
    worksheet.clear()
    head = worksheet.insert_row(columns, 1)
    res = worksheet.insert_rows(myfilt, 2)


api("MyAPIHere")

我的目标是根据 len(myfilt) 预定义行数,根据 len(cols)

预定义列数

我相信你的目标如下。

  • 您想更改 Google Spreadsheet 中现有 sheet 的最大行数和列数。
  • 您想通过 python.
  • 使用 gspread 来实现此目的
  • 您已经能够使用 Sheets API.
  • 获取和输入 Google Spreadsheet 的值

实现目标的分数:

这种情况下,需要使用Sheets API中的“spreadsheets.batchUpdate”的方法。我想提出以下流程。

  1. 插入一行。
  2. 插入一列。
  3. 删除从 2 到末尾的行。
  4. 删除从 2 到末尾的列。
  5. 插入行。在这种情况下,您可以设置要插入的行数。
  6. 插入列。在这种情况下,您可以设置要插入的列数。

1和2用于避免错误。因为对于只有一行或一列的sheet,DeleteDimensionRequest为运行时,会报错

当上面的流程使用gspread反映到脚本中时,变成如下。

示例脚本:

请设置 Spreadsheet ID 和 sheet 名称。

spreadsheetId = "###"  # Please set the Spreadsheet ID.
sheetName = "###"  # Please set the sheet name.

client = gspread.authorize(credentials)
spreadsheet = client.open_by_key(spreadsheetId)
# worksheet = spreadsheet.worksheet(sheetName)
sheetId = spreadsheet.worksheet(sheetName)._properties['sheetId']
rows = len(myfilt)
columns = len(cols)

req = {
    "requests": [
        {
            "insertDimension": {
                "range": {
                    "sheetId": sheetId,
                    "startIndex": 0,
                    "endIndex": 1,
                    "dimension": "ROWS"
                }
            }
        },
        {
            "insertDimension": {
                "range": {
                    "sheetId": sheetId,
                    "startIndex": 0,
                    "endIndex": 1,
                    "dimension": "COLUMNS"
                }
            }
        },
        {
            "deleteDimension": {
                "range": {
                    "sheetId": sheetId,
                    "startIndex": 1,
                    "dimension": "ROWS"
                }
            }
        },
        {
            "deleteDimension": {
                "range": {
                    "sheetId": sheetId,
                    "startIndex": 1,
                    "dimension": "COLUMNS"
                }
            }
        },
        {
            "insertDimension": {
                "range": {
                    "sheetId": sheetId,
                    "startIndex": 0,
                    "endIndex": rows - 1,
                    "dimension": "ROWS"
                }
            }
        },
        {
            "insertDimension": {
                "range": {
                    "sheetId": sheetId,
                    "startIndex": 0,
                    "endIndex": columns - 1,
                    "dimension": "COLUMNS"
                }
            }
        }
    ]
}
res = spreadsheet.batch_update(req)
print(res)

参考文献:

我也使用以下方法解决了我的问题:

worksheet.clear() # to clear the sheet firstly.
head = worksheet.insert_row(header, 1) # inserting the header at first row
res = worksheet.insert_rows(mydata, 2) # inserting my data.
worksheet.resize(rows=len(mydata) + 1, cols=len(header)) # resize according to length of cols and rows.