首页 > 解决方案 > 在 gspread (Python) 中插入新行?

问题描述

我正在使用该gspread模块,最近遇到了这个问题insert_row():默认情况下,这个函数在上面添加了一个新行。这种方法的问题是“在上面添加行”会向上拖动行的格式。同样,“在下面添加行”会将行的格式向下拖动。

在我的电子表格中,我有小节,每个小节都有不同的格式和公式,例如范围 A1:J15 是一个小节。然后,第 16-17 行作为分隔符,颜色为深灰色,其中没有任何信息或公式。

我想扩大范围 A1:J15。我认为这很容易使用sheet_instance.insert_row(values=None, index=row_index),但如上所述,如果我设置row_index为 16 以添加上面的新行,深灰色分隔符现在将获得一个新行,我将丢失该部分中的所有公式(新)第 16 行。

如果我设置row_index为 15,我将拥有新行的公式和格式。但是,在这种情况下(新的)第 15 行将不在正确的位置,因为该数据必须在该部分的最后一行,但是由于gspread添加了上面的行,所以现在交换了最后两行数据,这是不正确的。

有没有办法强制insert_row()向下添加行?如果没有,我还有什么其他选择可以规避这个问题?

编辑: 我也尝试append_rows()通过将其table_range属性设置为与我的小节范围相同的属性来使用,即 A1:J15 但没有成功:

sheet_instance.append_rows(values=[None]*2, insert_data_option='INSERT_ROWS', table_range='A1:J15')

标签: pythongoogle-sheets-apigspread

解决方案


我设法解决了它。原来在 Google Sheets API 中有一个“插入空行/列inheritFromBefore”请求,它有一个参数,正是我需要的那个。通过将此参数设置为True,我可以强制从上方插入拖动格式,即复制“在下方插入行”功能。

我的代码如下:

body = {
    'requests': {
        'insertDimension': {
            "range": {
              "sheetId": sheet_instance.id,
              "dimension": "ROWS",
              "startIndex": row_idx-1,
              "endIndex": row_idx
            },
            "inheritFromBefore": True
        }
    }
}
for _ in range(3):
    response = service.spreadsheets().batchUpdate(
        spreadsheetId=sheet_id,
        body=body).execute()

上面的代码在原始行之前插入了 3 个新行row_idx


推荐阅读