如何用Python实现Excel带公式工作表的数据行替换?
正确实现Excel公式工作表的数值替换方案
原代码存在的问题
- 将所有单元格值扁平化存入列表,丢失行列结构,导致后续赋值逻辑完全混乱
- 赋值时错误地将行对象、单元格对象当作行号列号传入,会引发类型错误
- 嵌套循环逻辑错误:遍历数值列表时,每次都对所有单元格重复赋值,最终所有单元格都会被设置为列表最后一个元素
正确实现代码
from openpyxl import load_workbook from openpyxl.worksheet.worksheet import Worksheet # 替换为你的Excel文件路径 filename = "your_file.xlsx" # 1. 读取计算后的数值,保留原工作表的行列结构 wb_read = load_workbook(filename, data_only=True) ws_read: Worksheet = wb_read['Abschätzung SD Intern '] # 按行存储数据,每行对应原工作表的一行 calculated_data = [] for row in ws_read.iter_rows(values_only=True): calculated_data.append(list(row)) # 2. 打开原文件,将计算值替换到对应单元格 wb_write = load_workbook(filename) ws_write: Worksheet = wb_write['Abschätzung SD Intern '] # 逐行逐列匹配赋值(Excel行号列号从1开始) for row_idx, row_values in enumerate(calculated_data, start=1): for col_idx, cell_value in enumerate(row_values, start=1): ws_write.cell(row=row_idx, column=col_idx, value=cell_value) # 保存修改后的文件 wb_write.save(filename)
关键说明
- 使用
iter_rows(values_only=True)可以直接获取每行的单元格数值,简化代码同时保留行列对应关系 - 通过
enumerate(start=1)生成Excel的行号和列号(Excel单元格索引从1开始计数) - 逐行逐列精准赋值,确保每个位置的单元格都被正确替换为计算后的值
- 注意:如果公式依赖的单元格有更新,需先在Excel中打开文件并保存,确保
data_only=True读取到的是最新计算值
内容的提问来源于stack exchange,提问作者Mark Baumann
相关产品推荐
相关产品推荐

