如何用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
相关产品推荐
相关产品推荐

