我的问题是,当我运行代码并将其保存在 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编码后可以得到计算出的最终结果。
我是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()