Сохранение файлов xlsx, которые не повреждены через openpyxl - PullRequest
1 голос
/ 16 марта 2020

Я генерирую около 10000 файлов xlsx для запуска симуляции Монте-Карло с помощью программы AMPL.

Для генерации этих файлов я использую приведенный ниже скрипт python с использованием openpyxl. Получаемый в результате файл xlsx необходимо открыть, «сохранить как» и заменить на тот же xlsx, чтобы AMPL мог его распознать.

Я знаю, как это сделать только вручную, но ищу предложения по:

1) Что я могу изменить в скрипте python, чтобы избежать повреждения файла, чтобы я не Необходимо сохранить и заменить этот файл вручную.

2) Как «Сохранить как» пакет файлов xlsx с одинаковыми именами файлов xlsx.

Вот код

"""
Created on Mon Mar  2 14:59:43 2020
USES OPENPYXL to generate mc tables WITH NAMED RANGE
@author: rsuthar
"""

import openpyxl
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import math
import scipy.stats as stats
#import seaborn as sns

for k in range(1,2):
    wb = openpyxl.Workbook() 
    sheet = wb.active

    #named range for COL table so that AMPL can read it
    new_range = openpyxl.workbook.defined_name.DefinedName('COL', attr_text='Sheet!$A$1:$D$64')
    wb.defined_names.append(new_range)

    #Probability
    #Storage temp as truncated normal
    #temperature as normal mean 55 with 5F variation
    storagetempfarenht = 55.4
    storagetempkelvin = (storagetempfarenht + 459.67) * (5.0/9.0)
    highesttemp=60.8
    lowesttemp=50
    sigma = ((highesttemp + 459.67) * (5.0/9.0)) - storagetempkelvin
    mu, sigma = storagetempkelvin, sigma
    lower, upper = mu-2*sigma , mu+2*sigma
    temp = stats.truncnorm.rvs((lower - mu) / sigma, (upper - mu) / sigma, loc=mu, scale=sigma, size=1)

    #Generate the color after each condition with temp uncertainty
    kterm=0.0019*math.exp((170604/8.314)*((1/288.15)-(1/temp)))
    Hterm = '=16.949*EXP((-0.025)*(42 +((124-42)/(1+((EXP(%f*A2:A64*(124-42)))*(124-(16.949*EXP((-0.025)*C2:C64))/((16.949*EXP((-0.025)*C2:C64)-42))))))))' % kterm


    #First column
    sheet['A1'] = 'DAYD'
    number_of_repeats = 5
    days=range(1,13)
    current_cell_num = 2

    for repeat in range(number_of_repeats):
        for day in days:
            cell_string = 'A%d' % current_cell_num
            sheet[cell_string] = day
            current_cell_num = current_cell_num + 1
        if repeat == number_of_repeats - 1:
            for day in range(13,16,1):
                cell_string = 'A%d' % current_cell_num
                sheet[cell_string] = day
                current_cell_num = current_cell_num + 1

    #Second Column
    sheet['B1'] = 'CROP'                   
    for i, rowOfCellObjects in enumerate(sheet['B2':'B64']):
        for n, cellObj in enumerate(rowOfCellObjects):
            cellObj.value = 'TA'  

    #Third Column
    sheet['C1'] = 'QUAL'     
    for i, rowOfCellObjects in enumerate(sheet['C2':'C13']):
        for n, cellObj in enumerate(rowOfCellObjects):
            cellObj.value = 2

    sheet['C1'] = 'QUAL'     
    for i, rowOfCellObjects in enumerate(sheet['C14':'C25']):
        for n, cellObj in enumerate(rowOfCellObjects):
            cellObj.value = 3

    sheet['C1'] = 'QUAL'     
    for i, rowOfCellObjects in enumerate(sheet['C26':'C37']):
        for n, cellObj in enumerate(rowOfCellObjects):
            cellObj.value = 4

    sheet['C1'] = 'QUAL'     
    for i, rowOfCellObjects in enumerate(sheet['C38':'C49']):
        for n, cellObj in enumerate(rowOfCellObjects):
            cellObj.value = 5

    sheet['C1'] = 'QUAL'     
    for i, rowOfCellObjects in enumerate(sheet['C50':'C64']):
        for n, cellObj in enumerate(rowOfCellObjects):
            cellObj.value = 1

    #fourth Column

    sheet['D1'] = 'COL'     

    for i, rowOfCellObjects in enumerate(sheet['D2':'D64']):
        for n, cellObj in enumerate(rowOfCellObjects):
            cellObj.value = Hterm

    #save the file everytime
    wb.save(filename='COL' + str(k) + '.xlsx')
...