You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 02:54:24