gspread update_cells 写入错误的地方
gspread update_cells writes to wrong place
我正在为一个包含大量 google 电子表格的个人 Twitter 机器人项目编写代码。 Twitter 方面运行良好,但我在 google 电子表格方面遇到问题。我正在使用 gspread,程序一直写入错误的地方。
cells=[]
cells.append(gspread.models.Cell(josa_row+2, 2, tweet.text))
if josa_place_vals[coord[0]-1][coord[1]]=="END":
cells.append(gspread.models.Cell(josa_row+3, 1, "END"))
else:
cells.append(gspread.models.Cell(josa_row+2, 1,
location[0]+"/"+str(coord[0])+"/"+str(coord[1])))
cells.append(gspread.models.Cell(josa_row+3, 2,
josa_place_vals[coord[0]-1][coord[1]-1]))
josa_record.update_cells(cells)
josa_record 是我正在写入的工作表,内容和行正确显示,所以我认为解释该部分的代码不是必需的。(但如果是,请告诉我。 )
真正的问题是,虽然我已经指定列为 2、1 和 2,但是应该在第二列的列被写入了第一列,而应该在第一列的列列完全消失。不过它不会引发错误。
我做错了什么?我需要 post 更多代码来帮助你们吗? (我不想 post 整个函数,因为它有 130 行长而且大部分都不相关。)
这个答案怎么样?
问题:
gspread的update_cells()
使用了SheetsAPI中spreadsheets.values.update的方法。在这种情况下,为了创建用于放置值的列表,使用了 utils.py
文件中的 cell_list_to_rect()
函数。这时候,在你的脚本中,当cells
按以下顺序创建时,
gspread.models.Cell(josa_row+2, 2, tweet.text)
gspread.models.Cell(josa_row+3, 1, "END")
gspread.models.Cell(josa_row+3, 2, josa_place_vals[coord[0]-1][coord[1]-1])
[[tweet.text], [josa_place_vals[coord[0]-1][coord[1]-1]]]
被创建为用于放置值的列表。 gspread.models.Cell(josa_row+3, 1, "END")
未包含在列表中。
按以下顺序创建 cells
时,
gspread.models.Cell(josa_row+2, 2, tweet.text)
gspread.models.Cell(josa_row+2, 1, location[0]+"/"+str(coord[0])+"/"+str(coord[1]))
gspread.models.Cell(josa_row+3, 2, josa_place_vals[coord[0]-1][coord[1]-1])
[[tweet.text], [josa_place_vals[coord[0]-1][coord[1]-1]]]
被创建为用于放置值的列表。 location[0]+"/"+str(coord[0])+"/"+str(coord[1])
未包含在列表中。
似乎当用于将值放入电子表格的列表是从 cells
创建时,这些值被 utils.py
文件中的 cell_list_to_rect()
函数删除。
从上面的结果来看,当使用gspread的gspread.models.Cell
时,发现坐标值的追加顺序很重要
解决方案:
如果你不想修改gspread的原始脚本,想修改你的脚本,需要考虑cells
中每个值的顺序。它以行和列的小顺序附加值。那么下面的修改呢?
我认为针对您的情况有一些修改,因此请将此视为几个答案之一。
修改后的脚本:
cells=[]
cells.append(gspread.models.Cell(josa_row+2, 2, tweet.text))
if josa_place_vals[coord[0]-1][coord[1]]=="END":
cells.insert(0, gspread.models.Cell(josa_row+2, 1, "")) # Added
cells.append(gspread.models.Cell(josa_row+3, 1, "END"))
else:
cells.insert(0, gspread.models.Cell(josa_row+2, 1, location[0]+"/"+str(coord[0])+"/"+str(coord[1]))) # Modified
cells.append(gspread.models.Cell(josa_row+3, 2,
josa_place_vals[coord[0]-1][coord[1]-1]))
josa_record.update_cells(cells)
注:
- 在此答案中,假设您已经能够使用 gspread 为电子表格输入和获取值。
参考文献:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
已添加:
作为另一种模式,使用sort()
怎么样?
修改后的脚本:
cells=[]
cells.append(gspread.models.Cell(josa_row+2, 2, tweet.text))
if josa_place_vals[coord[0]-1][coord[1]]=="END":
cells.append(gspread.models.Cell(josa_row+2, 1, "")) # Added
cells.append(gspread.models.Cell(josa_row+3, 1, "END"))
else:
cells.append(gspread.models.Cell(josa_row+2, 1, location[0]+"/"+str(coord[0])+"/"+str(coord[1])))
cells.append(gspread.models.Cell(josa_row+3, 2,
josa_place_vals[coord[0]-1][coord[1]-1]))
cells.sort(key=lambda x: (x._row, x._col)) # Added
josa_record.update_cells(cells)
我正在为一个包含大量 google 电子表格的个人 Twitter 机器人项目编写代码。 Twitter 方面运行良好,但我在 google 电子表格方面遇到问题。我正在使用 gspread,程序一直写入错误的地方。
cells=[]
cells.append(gspread.models.Cell(josa_row+2, 2, tweet.text))
if josa_place_vals[coord[0]-1][coord[1]]=="END":
cells.append(gspread.models.Cell(josa_row+3, 1, "END"))
else:
cells.append(gspread.models.Cell(josa_row+2, 1,
location[0]+"/"+str(coord[0])+"/"+str(coord[1])))
cells.append(gspread.models.Cell(josa_row+3, 2,
josa_place_vals[coord[0]-1][coord[1]-1]))
josa_record.update_cells(cells)
josa_record 是我正在写入的工作表,内容和行正确显示,所以我认为解释该部分的代码不是必需的。(但如果是,请告诉我。 )
真正的问题是,虽然我已经指定列为 2、1 和 2,但是应该在第二列的列被写入了第一列,而应该在第一列的列列完全消失。不过它不会引发错误。
我做错了什么?我需要 post 更多代码来帮助你们吗? (我不想 post 整个函数,因为它有 130 行长而且大部分都不相关。)
这个答案怎么样?
问题:
gspread的update_cells()
使用了SheetsAPI中spreadsheets.values.update的方法。在这种情况下,为了创建用于放置值的列表,使用了 utils.py
文件中的 cell_list_to_rect()
函数。这时候,在你的脚本中,当cells
按以下顺序创建时,
gspread.models.Cell(josa_row+2, 2, tweet.text)
gspread.models.Cell(josa_row+3, 1, "END")
gspread.models.Cell(josa_row+3, 2, josa_place_vals[coord[0]-1][coord[1]-1])
[[tweet.text], [josa_place_vals[coord[0]-1][coord[1]-1]]]
被创建为用于放置值的列表。 gspread.models.Cell(josa_row+3, 1, "END")
未包含在列表中。
按以下顺序创建 cells
时,
gspread.models.Cell(josa_row+2, 2, tweet.text)
gspread.models.Cell(josa_row+2, 1, location[0]+"/"+str(coord[0])+"/"+str(coord[1]))
gspread.models.Cell(josa_row+3, 2, josa_place_vals[coord[0]-1][coord[1]-1])
[[tweet.text], [josa_place_vals[coord[0]-1][coord[1]-1]]]
被创建为用于放置值的列表。 location[0]+"/"+str(coord[0])+"/"+str(coord[1])
未包含在列表中。
似乎当用于将值放入电子表格的列表是从 cells
创建时,这些值被 utils.py
文件中的 cell_list_to_rect()
函数删除。
从上面的结果来看,当使用gspread的gspread.models.Cell
时,发现坐标值的追加顺序很重要
解决方案:
如果你不想修改gspread的原始脚本,想修改你的脚本,需要考虑cells
中每个值的顺序。它以行和列的小顺序附加值。那么下面的修改呢?
我认为针对您的情况有一些修改,因此请将此视为几个答案之一。
修改后的脚本:
cells=[]
cells.append(gspread.models.Cell(josa_row+2, 2, tweet.text))
if josa_place_vals[coord[0]-1][coord[1]]=="END":
cells.insert(0, gspread.models.Cell(josa_row+2, 1, "")) # Added
cells.append(gspread.models.Cell(josa_row+3, 1, "END"))
else:
cells.insert(0, gspread.models.Cell(josa_row+2, 1, location[0]+"/"+str(coord[0])+"/"+str(coord[1]))) # Modified
cells.append(gspread.models.Cell(josa_row+3, 2,
josa_place_vals[coord[0]-1][coord[1]-1]))
josa_record.update_cells(cells)
注:
- 在此答案中,假设您已经能够使用 gspread 为电子表格输入和获取值。
参考文献:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
已添加:
作为另一种模式,使用sort()
怎么样?
修改后的脚本:
cells=[]
cells.append(gspread.models.Cell(josa_row+2, 2, tweet.text))
if josa_place_vals[coord[0]-1][coord[1]]=="END":
cells.append(gspread.models.Cell(josa_row+2, 1, "")) # Added
cells.append(gspread.models.Cell(josa_row+3, 1, "END"))
else:
cells.append(gspread.models.Cell(josa_row+2, 1, location[0]+"/"+str(coord[0])+"/"+str(coord[1])))
cells.append(gspread.models.Cell(josa_row+3, 2,
josa_place_vals[coord[0]-1][coord[1]-1]))
cells.sort(key=lambda x: (x._row, x._col)) # Added
josa_record.update_cells(cells)