Python gspread API 如果调用多个函数则不追加行
Python gspread API not appending rows if multiple functions called
我正在使用 Python 中的 gspread 模块创建一个涉及电子表格中动态行数的应用程序。
电子表格如下所示:
每当用户添加新的 Pinterest Pin 图时,程序应该在底部再追加一行。我可以模拟此行并附加以下代码:
client = gspread.authorize(SAC.from_json_keyfile_name("WROS-Editor.json", ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']))
spreadsheet = client.open("WROS")
pinterest_sheet = spreadsheet.worksheet("Pinterest Pins")
pinterest_sheet.append_row([""]) # Simulating when the user creates a new pin
这按预期工作,在底部添加 1 行:
但是,当我调用该函数两次时,没有附加新行。以下代码的输出与之前的屏幕截图相同。
pinterest_sheet.append_row([""]) # Just adds 1 new row, should add 2 new rows.
pinterest_sheet.append_row([""])
当我使用 add_rows()
函数时,也会出现同样的问题。当我两次调用该函数时(每次添加 1 行,即 pinterest_sheet.add_rows(1)
),它只添加 1 行。如果我将添加行的第二个数字更改为 2,它总共添加 2 行(应该添加 3)。
pinterest_sheet.add_rows(1) # Only adds 2 rows in total, should add 3 rows.
pinterest_sheet.add_rows(2)
为什么会出现这个问题,我该如何解决?
关于你的情况:
我了解你的情况如下。
- 作为初始情况,sheet只有4行。
- 对于4行的sheet,当你运行
append_row([""])
时,附加了一个空行,而sheet有5行。
- 对于sheet有5行,当你运行
append_row([""])
时,sheet有5行。并且没有附加一个空行。
- 你想知道这是什么原因。
关于append_row()
:
好像gspread的append_row()
使用了Sheets API中的“spreadsheets.values.append”的方法。在此方法中,首先检索最后一行并将值附加到最后一行的下一行。我认为当搜索最后一行时,它会搜索该值是否在内部服务器的单元格中。这样,当第2个流在上面的流中是运行时,最后一行是第4行。当第3个流在上面的流中是运行时,最后一行是第4行,因为最后一行具有值的单元格是第 4 行。我认为这就是您 append_row()
.
问题的原因
此规范与Spreadsheet服务中ClassSheet的appendRow(rowContents)
方法相同。从这个情况来看,在Google这边,似乎“spreadsheets.values.append”的方法和appendRow(rowContents)
的方法都假设""
不是这个值。
关于add_rows()
:
当我在GitHub看到gspread的add_rows()
时,好像输入的数字是rows=self.row_count + rows
。 Ref When I saw resize()
, after the row was added, it seems that self.row_count
is not updated. Ref 这样,当您 运行 以下脚本时,
pinterest_sheet.add_rows(1)
pinterest_sheet.add_rows(2)
在pinterest_sheet.add_rows(1)
和pinterest_sheet.add_rows(2)
处,rows=self.row_count + rows
分别是6
和7
。我认为这就是您 add_rows()
.
问题的原因
解决方法:
当你想追加 3 个空行,即使最后一行的值没有改变,下面的解决方法怎么样?
模式 1:
pinterest_sheet.add_rows(3)
And/or
pinterest_sheet.append_rows([[""], [""], [""]])
模式二:
当脚本每次都是运行时要添加新行,即使最后一行的值没有改变,下面的脚本怎么样?
# client = Please set your client here
spreadsheetId = "###" # Please set the Spreadsheet ID.
sheetName = "Sheet1" # Please set the sheet name.
spreadsheet = client.open_by_key(spreadsheetId)
sheetId = spreadsheet.worksheet(sheetName)._properties['sheetId']
req = {
"requests": [
{
"appendCells": {
"rows": [
{
"values": [
{
"userEnteredValue": {
"stringValue": ""
}
}
]
}
],
"fields": "userEnteredValue",
"sheetId": sheetId
}
}
]
}
res = spreadsheet.batch_update(req)
print(res)
- 当
rows
的长度增加到3时,追加3个空行。
- 在这个示例中,使用了Sheets API中“spreadsheets.batchUpdate”方法的“AppendCellsRequest”。在这种情况下,似乎
""
被用作值。
参考文献:
我正在使用 Python 中的 gspread 模块创建一个涉及电子表格中动态行数的应用程序。
电子表格如下所示:
每当用户添加新的 Pinterest Pin 图时,程序应该在底部再追加一行。我可以模拟此行并附加以下代码:
client = gspread.authorize(SAC.from_json_keyfile_name("WROS-Editor.json", ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']))
spreadsheet = client.open("WROS")
pinterest_sheet = spreadsheet.worksheet("Pinterest Pins")
pinterest_sheet.append_row([""]) # Simulating when the user creates a new pin
这按预期工作,在底部添加 1 行:
但是,当我调用该函数两次时,没有附加新行。以下代码的输出与之前的屏幕截图相同。
pinterest_sheet.append_row([""]) # Just adds 1 new row, should add 2 new rows.
pinterest_sheet.append_row([""])
当我使用 add_rows()
函数时,也会出现同样的问题。当我两次调用该函数时(每次添加 1 行,即 pinterest_sheet.add_rows(1)
),它只添加 1 行。如果我将添加行的第二个数字更改为 2,它总共添加 2 行(应该添加 3)。
pinterest_sheet.add_rows(1) # Only adds 2 rows in total, should add 3 rows.
pinterest_sheet.add_rows(2)
为什么会出现这个问题,我该如何解决?
关于你的情况:
我了解你的情况如下。
- 作为初始情况,sheet只有4行。
- 对于4行的sheet,当你运行
append_row([""])
时,附加了一个空行,而sheet有5行。 - 对于sheet有5行,当你运行
append_row([""])
时,sheet有5行。并且没有附加一个空行。- 你想知道这是什么原因。
关于append_row()
:
好像gspread的append_row()
使用了Sheets API中的“spreadsheets.values.append”的方法。在此方法中,首先检索最后一行并将值附加到最后一行的下一行。我认为当搜索最后一行时,它会搜索该值是否在内部服务器的单元格中。这样,当第2个流在上面的流中是运行时,最后一行是第4行。当第3个流在上面的流中是运行时,最后一行是第4行,因为最后一行具有值的单元格是第 4 行。我认为这就是您 append_row()
.
此规范与Spreadsheet服务中ClassSheet的appendRow(rowContents)
方法相同。从这个情况来看,在Google这边,似乎“spreadsheets.values.append”的方法和appendRow(rowContents)
的方法都假设""
不是这个值。
关于add_rows()
:
当我在GitHub看到gspread的add_rows()
时,好像输入的数字是rows=self.row_count + rows
。 Ref When I saw resize()
, after the row was added, it seems that self.row_count
is not updated. Ref 这样,当您 运行 以下脚本时,
pinterest_sheet.add_rows(1)
pinterest_sheet.add_rows(2)
在pinterest_sheet.add_rows(1)
和pinterest_sheet.add_rows(2)
处,rows=self.row_count + rows
分别是6
和7
。我认为这就是您 add_rows()
.
解决方法:
当你想追加 3 个空行,即使最后一行的值没有改变,下面的解决方法怎么样?
模式 1:
pinterest_sheet.add_rows(3)
And/or
pinterest_sheet.append_rows([[""], [""], [""]])
模式二:
当脚本每次都是运行时要添加新行,即使最后一行的值没有改变,下面的脚本怎么样?
# client = Please set your client here
spreadsheetId = "###" # Please set the Spreadsheet ID.
sheetName = "Sheet1" # Please set the sheet name.
spreadsheet = client.open_by_key(spreadsheetId)
sheetId = spreadsheet.worksheet(sheetName)._properties['sheetId']
req = {
"requests": [
{
"appendCells": {
"rows": [
{
"values": [
{
"userEnteredValue": {
"stringValue": ""
}
}
]
}
],
"fields": "userEnteredValue",
"sheetId": sheetId
}
}
]
}
res = spreadsheet.batch_update(req)
print(res)
- 当
rows
的长度增加到3时,追加3个空行。 - 在这个示例中,使用了Sheets API中“spreadsheets.batchUpdate”方法的“AppendCellsRequest”。在这种情况下,似乎
""
被用作值。