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

如何用Python(含openpyxl)实时更新Excel指定单元格数据?

当然可以实现!

你已经搞定了最核心的数据提取环节,剩下的把数据写入Excel指定单元格简直手到擒来——不管是用openpyxl精准操控单个单元格,还是结合pandas批量写入,都完全能满足你的自动化需求。下面给你两种实用方案,按需选择就行:

方案一:用openpyxl精准控制单个单元格

如果你需要把数据写入分散的指定单元格(比如把PYPL的最新收盘价塞进B3,BABA的写进C5这种),或者想完全掌控每一个单元格的内容,这个方法最稳妥:

步骤示例(直接对接你的代码)

import pandas as pd
import pandas_datareader.data as web
import datetime as dt
from openpyxl import load_workbook

# --- 你的数据提取代码(完全保留)---
start = dt.datetime(2000,1,1)
end = dt.datetime.today()
tickers = [ "PYPL", "BABA", "SAP" ]
df = web.DataReader(tickers, 'yahoo', start, end)
data_to_write = df.tail(365)['Adj Close']  # 你要写入的365天调整后收盘价

# --- 开始写入Excel ---
# 1. 加载现有的Excel文件(如果文件不存在,就用Workbook()新建)
wb = load_workbook('你的Excel文件路径.xlsx')
ws = wb['Sheet1']  # 指定要写入的工作表,比如Sheet1

# 2. 举例:把数据从B2单元格开始写入,第一行放股票代码,下面放日期和对应价格
start_row = 2
start_col = 2

# 写入股票代码(列标题)
for col_num, ticker in enumerate(data_to_write.columns, start=start_col):
    ws.cell(row=start_row, column=col_num, value=ticker)

# 写入日期和每日收盘价
start_row += 1  # 从下一行开始写数据
for row_num, (date, price_values) in enumerate(data_to_write.iterrows(), start=start_row):
    # 写入日期(转成字符串格式避免Excel自动识别出错)
    ws.cell(row=row_num, column=start_col, value=date.strftime('%Y-%m-%d'))
    # 写入每个股票的收盘价
    for col_num, price in enumerate(price_values, start=start_col+1):
        ws.cell(row=row_num, column=col_num, value=price)

# 3. 保存文件
wb.save('你的Excel文件路径.xlsx')

方案二:用pandas+openpyxl批量写入指定区域

如果你只是要把整批数据写入Excel的某一块连续区域,这个方法更高效,代码量少一半:

步骤示例

import pandas as pd
import pandas_datareader.data as web
import datetime as dt

# --- 你的数据提取代码(完全保留)---
start = dt.datetime(2000,1,1)
end = dt.datetime.today()
tickers = [ "PYPL", "BABA", "SAP" ]
df = web.DataReader(tickers, 'yahoo', start, end)
# 把日期从索引转成普通列,方便写入时和数据对齐
data_to_write = df.tail(365)['Adj Close'].reset_index()

# --- 批量写入Excel ---
# 使用openpyxl引擎,mode='a'表示追加到现有文件,if_sheet_exists='overlay'表示覆盖指定区域内容
with pd.ExcelWriter('你的Excel文件路径.xlsx', engine='openpyxl', mode='a', if_sheet_exists='overlay') as writer:
    # startrow=1, startcol=1 表示从第2行第2列(B2)开始写入,index=False不写索引列
    data_to_write.to_excel(writer, sheet_name='Sheet1', startrow=1, startcol=1, index=False)

小提醒

  • 先确保安装了所需库:pip install openpyxl pandas pandas-datareader
  • 如果Excel文件还没创建,方案一中可以用from openpyxl import Workbook,然后wb = Workbook()新建文件;方案二中如果是新建文件,把mode='a'改成mode='w'(但会覆盖整个文件)
  • 要是日期在Excel里显示格式不对,可以在openpyxl里给单元格设置格式:ws.cell(...).number_format = 'yyyy-mm-dd'

内容的提问来源于stack exchange,提问作者phk31

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:51:00