将mealpy Python连接到excel

问题描述 投票:0回答:1

我的问题是,当我运行代码并将其保存在 Excel 工作簿中时,所有公式都消失了,只有数据存在并保存在工作簿中。我尝试消除 data_only= True,但如果这样做,代码将无法运行。那么,如何在不影响公式的情况下运行代码呢?

import openpyxl
from mealpy import FloatVar, SHADE

wb = openpyxl.load_workbook('Book2.xlsx',data_only= True)
sheet = wb['Optimization']

def objective_function(solution):
    sheet['F4'].value = solution[0]
    sheet['F5'].value = solution[1]
    sheet['F6'].value = solution[2]
    sheet['F7'].value = solution[3]
    sheet['F8'].value = solution[4]
    sheet['F9'].value = solution[5]
    sheet['E16'].value = solution[6]
    sheet['F16'].value = solution[7]
    sheet['G16'].value = solution[8]
    sheet['H16'].value = solution[9]
    sheet['I16'].value = solution[10]
    sheet['J16'].value = solution[11]
    sheet['K16'].value = solution[12]
    sheet['L16'].value = solution[13]
    sheet['M16'].value = solution[14]
    sheet['N16'].value = solution[15]
    sheet['O16'].value = solution[16]
    sheet['P16'].value = solution[17]
    sheet['Q16'].value = solution[18]
    sheet['R16'].value = solution[19]
    sheet['S16'].value = solution[20]

    return sheet['U9'].value

problem = {
    "obj_func": objective_function,
    "bounds": FloatVar(ub=(1.,)*21, lb=(0.,)*21),
    "minmax": "min",
    "log_to": "console",
}

## Run the algorithm
optimizer = SHADE.OriginalSHADE(epoch=100, pop_size=50)
g_best = optimizer.solve(problem)
print(f"Best solution: {g_best.solution}, Best fitness: {g_best.target.fitness}")

wb.save('Book2.xlsx')

那么,如何在不影响公式的情况下运行代码呢? 因为我需要保留excel中的原始公式,以便在Python中运行mealpy编码后可以得到计算出的最终结果。

python pycharm
1个回答
0
投票

我是mealpy 的开发者。 我建议您使用不同的包来处理 Excel 文件。这是我针对您的问题的解决方案。

import xlwings as xw
from mealpy import FloatVar, SHADE

# Open the Excel file
wb = xw.Book('Book2.xlsx')
sheet = wb.sheets['Sheet1']  # Change the sheet name if needed

def objective_function(solution):
    sheet.range('F4').value = solution[0]
    sheet.range('F5').value = solution[1]
    sheet.range('F6').value = solution[2]
    sheet.range('F7').value = solution[3]
    sheet.range('F8').value = solution[4]
    sheet.range('F9').value = solution[5]
    sheet.range('E16').value = solution[6]
    sheet.range('F16').value = solution[7]
    sheet.range('G16').value = solution[8]
    sheet.range('H16').value = solution[9]
    sheet.range('I16').value = solution[10]
    sheet.range('J16').value = solution[11]
    sheet.range('K16').value = solution[12]
    sheet.range('L16').value = solution[13]
    sheet.range('M16').value = solution[14]
    sheet.range('N16').value = solution[15]
    sheet.range('O16').value = solution[16]
    sheet.range('P16').value = solution[17]
    sheet.range('Q16').value = solution[18]
    sheet.range('R16').value = solution[19]
    sheet.range('S16').value = solution[20]

    return sheet.range('U9').value


problem = {
    "obj_func": objective_function,
    "bounds": FloatVar(ub=(1.,)*21, lb=(0.,)*21),
    "minmax": "min",
    "log_to": "console",
}

## Run the algorithm
optimizer = SHADE.OriginalSHADE(epoch=100, pop_size=50)
g_best = optimizer.solve(problem)
print(f"Best solution: {g_best.solution}, Best fitness: {g_best.target.fitness}")

# Close the Excel file when done (optional)
wb.close()
© www.soinside.com 2019 - 2024. All rights reserved.