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

2024-09-30 12:16:09 发布

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

我确实有一个刮取的数据,我每天都用它覆盖谷歌表单

这里的要点是,我找不到一个可以为现有google工作表设置行数和列数的选项

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

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)预定义列数


Tags: columnsof数据keyapi表单lensh
2条回答

我相信你的目标如下

  • 您希望更改Google电子表格中现有工作表的最大行数和列数
  • 您希望使用gspread和python来实现这一点
  • 您已经能够使用Sheets API获取和输入Google电子表格的值

实现目标的积分:

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

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

1和2用于避免错误。因为当对只有一行或一列的图纸运行DeleteDimensionRequest时,会发生错误

当使用gspread将上述流反射到脚本时,它将变成如下所示

示例脚本:

请设置电子表格ID和工作表名称

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.

相关问题 更多 >

    热门问题