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

如何用Python导入DataFrame至Excel且不覆盖原有函数

解决方案

目标1:导入DataFrame时不修改B、D列的现有公式

直接操作Excel指定单元格,只写入A、C列数据,完全保留B、D列的公式。推荐用openpyxl库实现:

import pandas as pd
from openpyxl import load_workbook

# 你的目标DataFrame,列对应要写入的A、C列
df = pd.DataFrame({'A列数据': [10, 20, 30], 'C列数据': [40, 50, 60]})

# 加载已有的Excel文件
wb = load_workbook('目标文件.xlsx')
ws = wb['目标工作表']  # 替换成你的工作表名称

# 从第2行开始写入数据(假设第1行是表头)
for row_idx, data_row in df.iterrows():
    excel_row_num = row_idx + 2  # Excel行号从1开始,跳过表头行
    # 写入A列(Excel第1列)
    ws.cell(row=excel_row_num, column=1, value=data_row['A列数据'])
    # 写入C列(Excel第3列)
    ws.cell(row=excel_row_num, column=3, value=data_row['C列数据'])

# 保存修改后的文件
wb.save('目标文件.xlsx')

这个方法的核心是只更新需要的单元格,完全不触碰B、D列,所以原有公式会被完整保留。


目标2:提取B、D列公式并整合到DataFrame后再导入

如果需要把公式和DataFrame数据一起写入,可以先读取现有Excel中的公式,填充到DataFrame的对应列,再整体写入:

方法1:逐行读取现有公式

import pandas as pd
from openpyxl import load_workbook

# 加载现有Excel读取公式
wb = load_workbook('目标文件.xlsx')
ws = wb['目标工作表']

# 初始化包含所有列的DataFrame,B、D列先设为None
df = pd.DataFrame({
    'A列数据': [10, 20, 30],
    'B列公式': [None]*3,
    'C列数据': [40, 50, 60],
    'D列公式': [None]*3
})

# 逐行读取B、D列的公式并填充到DataFrame
for df_idx in range(len(df)):
    excel_row_num = df_idx + 2
    # 获取B列(Excel第2列)的公式
    df.loc[df_idx, 'B列公式'] = ws.cell(row=excel_row_num, column=2).value
    # 获取D列(Excel第4列)的公式
    df.loc[df_idx, 'D列公式'] = ws.cell(row=excel_row_num, column=4).value

# 将包含公式的DataFrame写入Excel,使用openpyxl引擎
df.to_excel('目标文件.xlsx', sheet_name='目标工作表', index=False, engine='openpyxl')

方法2:批量生成规律公式

如果B、D列的公式是有规律的相对引用(比如B2=A2/2,B3=A3/2),可以直接在DataFrame中生成公式,不用逐行读取:

import pandas as pd

df = pd.DataFrame({
    'A列数据': [10, 20, 30],
    'C列数据': [40, 50, 60]
})

# 生成B列公式:=A{行号}/2
df['B列公式'] = df.apply(lambda row: f"=A{row.name + 2}/2", axis=1)
# 生成D列公式(假设是=C{行号}+...,根据实际需求调整)
df['D列公式'] = df.apply(lambda row: f"=C{row.name + 2}+E{row.name + 2}", axis=1)

# 写入Excel,openpyxl引擎会识别带=的字符串为公式
df.to_excel('目标文件.xlsx', sheet_name='目标工作表', index=False, engine='openpyxl')

这种方法适合公式有统一规律的场景,比逐行读取更高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:10:55