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

Python与Excel交互:向蒸汽表传入数据并获取过热焓值

解决Excel蒸汽表写入数据后未触发双插值计算的问题

问题根源

你用openpyxl遇到的问题本质是:openpyxl仅操作Excel文件的底层结构,不会调用Excel的计算引擎。加上初始化时用了data_only=True,读取的是单元格里已有的静态值,而非公式动态计算后的结果。即便写入新数据并保存,Excel公式也不会自动重新计算,自然拿不到更新后的焓值。

解决方案

改用xlwings库,它会直接启动本地Excel实例,完全复用Excel的原生计算能力,能确保写入数据后触发公式重算,获取最新结果。

修复后的完整代码

import xlwings as xw
import os

def process_excel_files(input_file, process_file, output_file, data_sheet_name, process_sheet_name, result_sheet_name, input_columns, result_column, start_row=1):
    # 启动后台Excel实例,关闭弹窗和屏幕更新提升效率
    with xw.App(visible=False) as app:
        app.display_alerts = False
        app.screen_updating = False

        # 加载工作簿
        input_wb = app.books.open(input_file)
        process_wb = app.books.open(process_file)
        output_wb = app.books.open(output_file)

        # 选择工作表
        data_sheet = input_wb.sheets[data_sheet_name]
        process_sheet = process_wb.sheets[process_sheet_name]
        result_sheet = output_wb.sheets[result_sheet_name]

        # 遍历输入数据的每一行
        for row in range(start_row, data_sheet.range('A1').end('down').row + 1):
            # 读取压力和温度数据
            PressurePSI = data_sheet.range((row, input_columns[0])).value  # PSI单位压力
            TemperatureF = data_sheet.range((row, input_columns[1])).value  # 华氏度单位温度

            # 将数据写入蒸汽表指定单元格
            process_sheet.range('C8').value = PressurePSI
            process_sheet.range('D8').value = TemperatureF

            # 保存并关闭后重新打开,强制触发Excel计算(也可直接调用app.calculate()替代此步骤)
            process_wb.save()
            process_wb.close()
            process_wb = app.books.open(process_file)
            process_sheet = process_wb.sheets[process_sheet_name]

            # 获取计算后的焓值
            result_value = process_sheet.range('G8').value  # 焓值位于G8单元格

            # 将结果写入输出文件
            result_sheet.range((row, result_column)).value = result_value

        # 保存并关闭所有工作簿
        input_wb.save()
        output_wb.save()

        input_wb.close()
        process_wb.close()
        output_wb.close()

# 使用示例
input_file = 'TempPressVals.xlsx'
process_file = 'Steam_Tables.xlsx'
output_file = 'EnthalpyValues.xlsx'
data_sheet_name = 'Sheet1'
process_sheet_name = 'Sheet1'
result_sheet_name = 'Sheet1'
input_columns = [1, 2]  # 读取A、B列数据
result_column = 2  # 结果写入C列

process_excel_files(input_file, process_file, output_file, data_sheet_name, process_sheet_name, result_sheet_name, input_columns, result_column)

额外优化建议

如果不想通过关闭重开工作簿触发计算,可替换对应代码块为直接调用Excel的计算指令,效率更高:

# 替代保存关闭重开的代码
app.calculate()
result_value = process_sheet.range('G8').value

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 00:00:14