我正在尝试将温度/压力数据放入 蒸汽表 以获得过热焓数据。我已经成功地获取了数据并将其放入 Excel 文件中,然后它为我提取了焓数据。问题是,当我将温度和压力数据放入蒸汽表时,它实际上并没有进行双重插值,因此焓 (H) 值实际上从未改变
ng。我最终只得到了蒸汽数据中给出的原始值。有没有办法让它将数据放入文件中,然后按“输入”,以便它可以进行双重插值,然后我可以获取值?
这是我迄今为止的工作:
import openpyxl
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):
# Load the workbooks
input_wb = openpyxl.load_workbook(input_file)
process_wb = openpyxl.load_workbook(process_file, data_only=True)
output_wb = openpyxl.load_workbook(output_file)
# Select the sheets
data_sheet = input_wb[data_sheet_name]
process_sheet = process_wb[process_sheet_name]
result_sheet = output_wb[result_sheet_name]
# Iterate through each row in the data_sheet
for row in range(start_row, data_sheet.max_row + 1):
# Read data points from the data_sheet
PressurePSI = data_sheet.cell(row=row, column=input_columns[0]).value #steam Pressure in PSI
TemperatureF = data_sheet.cell(row=row, column=input_columns[1]).value #Stean Temperature in F
# Convert read data points from the data_sheet
# PressureMPA=PressurePSI*0.00689476 #Steam Pressure in MPA
# TemperatureC=(TemperatureF-32)*(5/9) #Steam Temperature in C
# Input data points into the process_sheet
process_sheet.cell(row=8, column=3).value = PressurePSI
process_sheet.cell(row=8, column=4).value = TemperatureF
# Save the process_wb to update the process_sheet
process_wb.save(process_file)
# Reload the output_wb to get the updated value
process_wb = openpyxl.load_workbook(process_file)
process_sheet = process_wb[process_sheet_name]
# Retrieve the result from the process_sheet
result_value = process_sheet.cell(row=8, column=7).value # Assuming the result is in cell G8
# Write the result into the result_sheet
result_sheet.cell(row=row, column=result_column).value = result_value
# Save the output_wb to update the result_sheet
output_wb.save(output_file)
# Usage example:
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] # Columns A and B
result_column = 1 # Column C
process_excel_files(input_file, process_file, output_file, data_sheet_name, process_sheet_name, result_sheet_name, input_columns, result_column)
问题在于你只是在打开和覆盖Excel文件,但从未给Excel计算插值的机会。你需要一种方法来触发重新计算或更新Excel文件中的公式。
以下是几种方法:
1. 使用
win32com
此方法允许你直接与Excel应用程序交互,并在代码中触发计算。
import openpyxl
import win32com.client
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):
# ... (代码与之前相同,直到保存process_wb之前) ...
process_wb.save(process_file)
# 使用win32com打开Excel并计算
excel = win32com.client.gencache.EnsureDispatch('Excel.Application')
workbook = excel.Workbooks.Open(process_file)
workbook.Calculate()
workbook.Save()
workbook.Close()
excel.Quit()
# ... (剩余代码与之前相同) ...
2. 使用
openpyxl
的
data_only=False
此方法允许你在打开文件时加载公式。然后,你可以访问单元格的值,这将强制Excel计算公式。
import openpyxl
# ... (其他代码) ...
# 打开 process_file 时加载公式
process_wb = openpyxl.load_workbook(process_file, data_only=False)
process_sheet = process_wb[process_sheet_name]
# ... (输入数据) ...
# 访问单元格值以触发计算
result_value = process_sheet.cell(row=8, column=7).value
# ... (剩余代码) ...
3. 在Excel文件中添加VBA代码
你可以在Excel文件中添加一个简单的VBA宏,该宏在工作簿打开时自动计算所有公式。然后,你可以使用Python代码打开和关闭文件,这将触发VBA宏并更新计算。
选择哪种方法?
-
如果你需要与Excel进行更深入的交互,或者需要在计算后执行其他操作,则
win32com
是一个不错的选择。 -
如果你只需要触发重新计算,则
openpyxl
的data_only=False
更简单、更轻量级。 - 如果你希望在每次打开文件时都进行计算,则 添加VBA宏 是一个不错的选择。
请注意,这些方法都需要你的计算机上安装了Microsoft Excel。
标签:python,excel From: 78849890