gspread_pandas自动化每日任务 实现A2前插行或表尾追加数据
Google Sheets自动写入日更数据实现方案
你不需要每次手动修改start参数,根据你想要的数据排列顺序,选下面任意一种方案即可,两种方案都可以直接对接Google Cloud的定时调度(比如Cloud Functions+Cloud Scheduler),不需要人工干预。
方案1:最新数据展示在表头下方(新数据在上,历史数据依次下移)
对应你提到的「A2上方插入新行预留写入位置」的需求,核心逻辑是每次写入前先在第2行(表头行下)插入空行,原有历史数据会自动下移,直接写入A2位置就不会覆盖旧数据。
# 你的原有DataFrame构造逻辑无需修改 day_summary = {'Dzień': yesterday, 'Przychód brutto': total_value.round(2), 'Przychód netto': total_value_vat.round(2), 'Koszt': total_cost.round(2) + koszt_wysylka, 'Koszt Facebook Ads': cost_fb, 'Zysk (produkty)': zysk.round(2), 'Koszty stałe': koszty_stale } df_day_summary = pd.DataFrame(day_summary, index=[1], columns=['Dzień', 'Przychód brutto', 'Przychód netto', 'Koszt', 'Koszt Facebook Ads', 'Zysk (produkty)', 'Koszty stałe']) spread = gspread_pandas.Spread("[spreadshetname]", config=c) # 拿到目标工作表实例 ws = spread.open_sheet('nowa_rentownosc') # 在第2行位置插入1行空行 ws.insert_rows(row=2, number=1) # 直接写入A2即可,不会覆盖历史数据 spread.df_to_sheet(df_day_summary, index=False, sheet='nowa_rentownosc', start='A2', replace=False, headers=False)
- 适用场景:打开表格优先查看最新当日数据,历史数据按时间倒序排列。
方案2:新数据追加在表格末尾(数据按时间正序排列)
对应你提到的「定位最后非空行追加写入」的需求,核心逻辑是先读取当前工作表已填充的所有内容,计算出最后一行的行号,在下一个空行位置写入当日数据,不需要插入空行。
# 你的原有DataFrame构造逻辑无需修改 day_summary = {'Dzień': yesterday, 'Przychód brutto': total_value.round(2), 'Przychód netto': total_value_vat.round(2), 'Koszt': total_cost.round(2) + koszt_wysylka, 'Koszt Facebook Ads': cost_fb, 'Zysk (produkty)': zysk.round(2), 'Koszty stałe': koszty_stale } df_day_summary = pd.DataFrame(day_summary, index=[1], columns=['Dzień', 'Przychód brutto', 'Przychód netto', 'Koszt', 'Koszt Facebook Ads', 'Zysk (produkty)', 'Koszty stałe']) spread = gspread_pandas.Spread("[spreadshetname]", config=c) ws = spread.open_sheet('nowa_rentownosc') all_filled_values = ws.get_all_values() # 空表场景:先写入表头,再写第一行数据 if len(all_filled_values) == 0: spread.df_to_sheet(df_day_summary, index=False, sheet='nowa_rentownosc', start='A1', replace=False, headers=True) else: # 计算最后一个非空行的下一行位置 next_write_row = len(all_filled_values) + 1 start_position = f'A{next_write_row}' spread.df_to_sheet(df_day_summary, index=False, sheet='nowa_rentownosc', start=start_position, replace=False, headers=False)
注意:
get_all_values()会自动忽略表格末尾的连续空行,常规日更无空行的场景下定位完全准确;如果你的表格存在中间整行空值的情况,可以单独遍历A列(日期列)向上查找第一个有值的单元格来确定最后行号,稳定性更高。
- 适用场景:数据按日期从早到晚正序排列,适合做长期趋势统计。
内容的提问来源于stack exchange,提问作者kubri81
相关产品推荐
相关产品推荐

