Thema Datum  Von Nutzer Rating
Antwort
Rot Python-Script in VBA umschreiben
16.06.2015 11:10:01 Moe Zwahlen
NotSolved

Ansicht des Beitrags:
Von:
Moe Zwahlen
Datum:
16.06.2015 11:10:01
Views:
1398
Rating: Antwort:
  Ja
Thema:
Python-Script in VBA umschreiben

Hallo zusammen

Ich bin leider kein Programmierer, sondern erstelle thermische 3D-Simulationen mit IDA-ICE. Zum Auswerten verwenden wir zurzeit ein Python-Script, das von einem ehemaligen Praktikant ( ;D ) geschrieben wurde. Das übergreifende Ziel ist, dass automatisch aus allen Ordner in einem bestimmten Ordner die gewünschten Spalten aus den entsprechenden .prn-files ausgelesenund in eine Excel-Mappe kopiert werden.

Leider kann von uns niemand Python programmieren und deshalb möchten wir den untenstehenden Code in VBA umschreiben. Unter anderem, dass wir alles in einer Excel-Datei haben.

Könnte mir jemand supernettes den untenstehenden Code in VBA umschreiben, oder mir einen einfachen (!) Trick zeigen, damit ich das selber umwandeln kann?

Vielen Dank und beste Grüsse,

Moe

 

Python-Script:

 

#Importierten Module

import glob
import numpy as np
import xlsxwriter
import datetime


#-------------------------------------------------------------------
#Eingeben der zu vergleichenden Varianten

varianten=['V11_Kuehllast_konstLicht']
#varianten=['Basis','V7_Heizlast','V8_Heizlast_Kaltjahr_RT23']
#varianten=['Basis','V7_Heizlast','V8_Heizlast_Kaltjahr_RT23','V9_Kuehllast_Warmjahr','V10_Kuehllast_hoheInterneLasten']
"""print 'Geben Sie die Namen der Varianten ein.\nZum beenden schreiben Sie stop.\nZum loeschen der letzten Eingabe d.
varianten=[]
while True:
    input=raw_input()
    if input=='stop':
        print varianten
        print '\nIst die Eingabe korrekt? Schreiben Sie ok. Zum Wiederholen beliebige Taste betaetigen.'
        z=raw_input()        
        if z=='ok':        
            break
        else:
            del(varianten[:])
            print '\nEs wurden alle Zonen geloescht, bitte beginnen Sie von vorn.'
    elif input=='d':
        del(varianten[-1])
    else:
        varianten.append(input)
"""   


#-------------------------------------------------------------------
#Eingabe der Zonennamen in Kommandozeile
Zonen_AHU=[''Buero-Ltg','Bueromatik-Testmat','Buero-Therapie','Buero-Therapie Notfallzugang','Buero-Therapie-1','Buero-Therapie-2']                                            

"""i=0
Zonen_AHU=[]
while i < 2:
    if i==0:
        ueberschrift= '\nZoneneingabe!'
    else:
        ueberschrift= '\nAHU-Eingabe!'
    print ueberschrift + '\nFuer manuelle Eingabe druecken Sie bitte m.\nFuer automatische Generierung a.\nZum Ueberspringen u.\nZum Abbrechen break.'
    eingabeauswahl=raw_input()
    print
    if eingabeauswahl =='m':
        print ueberschrift +'\nGeben Sie die Namen der einzulesenden ORDNER nacheinander ein. Bestaetigen Sie bitte den eingegebenen Namen mit Enter.\nHaben Sie alle Zonen eingegeben, so beenden Sie bitte mit stop!\nZum loeschen der letzten Eingabe druecken sie d und bestaetigen anschliessend mit Enter!'
        while True:
            input=raw_input()
            if input=='stop':
                print Zonen_AHU
                break
            elif input=='d':
                del(Zonen_AHU[-1])
            else:
                Zonen_AHU.append(input)
    elif eingabeauswahl=='a':
        print ueberschrift +'\nBitte geben Sie den Namen ein, der vor dem zu generierenden Zonen/AHU-Ordnernamen stehen soll.'
        print 'Bsp.: Schreiben Sie Zone so ergibt sich Zone + Nummer'
        zone_ahu=raw_input()           
        print  '\nGeben Sie die Anzahl der Zonen/AHUs ein.'
        input=raw_input()
        anzahlzonen=int(input)+1
        zonenzahl=range(anzahlzonen)[1:]
        for zonennr in range(len(zonenzahl)):
            #Zonen_AHU.append(zone_ahu+ ' '+str(zonennr+1))
            Zonen_AHU.append(zone_ahu+str(zonennr+1))
        print Zonen_AHU
    elif eingabeauswahl=='break':
        break
    elif eingabeauswahl=='u':
        print Zonen_AHU
    else:
        print '\nUngueltige Taste!'
        i=i-1
    if i==1:  
        print '\nIst die Eingabe korrekt? Schreiben Sie ok. Zum Wiederholen beliebige Taste betaetigen.'
        z=raw_input()        
        if z=='ok':        
            break
        else:
            del(Zonen_AHU[:])
            print '\nEs wurden alle Zonen geloescht, bitte beginnen Sie von vorn.'
            i=-1
    i=i+1
"""

#-------------------------------------------------------------------
#Eingabe des .xlsx Dateinamen und Worksheet name

print '\nGib einen Dateinamen fuer die anschliessende .xlsx Datei ein.\nSoll der Standardname verwendet werden, so bestaetigen Sie NUR mit Enter.\nBei falscher Eingabe koennen Sie den Namen auch nach der Konvertierung manuell umbenennen.'
Dateiname=raw_input()
if Dateiname =='':
    dateiname='Profil_Zone_AHU.xlsx'
else:
    dateiname=str(Dateiname) + '.xlsx'
    
print '\nIhre anschliessende xlsx-Datei finden Sie unter dem Namen ' + dateiname




#-------------------------------------------------------------------
#Erstellen Liste mit .prn Namen mit Ornerstruktur

Liste_prn_namen_alle=[] #Leere Liste fuer alle vorhanden .prn Dateinamen mit Ordnerstruktur

for var in range(len(varianten)):
    for zone in range(len(Zonen_AHU)):
        prndata = glob.glob(varianten[var]+'\\'+Zonen_AHU[zone]+'/*.prn')
        Liste_prn_namen_alle.append(prndata)

Liste_prn_namen_alle=np.concatenate(np.array(Liste_prn_namen_alle)) #Zusammenfuegen aller .prn Dateinamen mit Ordnerstruktur



#-------------------------------------------------------------------
#Erstellen Liste mit .prn Namen ohne Ordnerstruktur. Alle doppelten werden ausgeworfen

Liste_prn_namen=[] #Leere Liste fuer die ausgewaehlten .prn Dateinnamen

for p in range(len(Liste_prn_namen_alle)):
    suche=Liste_prn_namen_alle[p].split('\\')[2] #Aussortieren doppelter Namen
    if suche in Liste_prn_namen:
        ''
    else:
        Liste_prn_namen.append(suche) #Anfuegen an Liste_prn_namen

#-------------------------------------------------------------------
#Manuelle Auswahl der Indexe

print '\nFolgende Liste zeigt die zur Auswahl stehenden Variablen mit zugehoergien Indexen.\nBitte trage Sie unterhalb der Tabelle die jeweiligen Nummern der auszugebenden Variablen ein.' #Abfrage nach den jeweiligen Namen

for index,wert in enumerate(Liste_prn_namen): #Namen einen Index zuweisen
    print index,', ',wert
    
indexinput_liste=[]    
print 'Geben Sie nun die jeweiligen Nummern der auszugebenden Variablen ein.\nZum Abbrechen stop.' #Abfrage nach den jeweiligen Namen
while True:
    indexinput=raw_input()
    if indexinput == 'stop':
        print indexinput_liste
        print '\nIst die Eingabe korrekt? Schreiben Sie ok. Zum Wiederholen beliebige Taste betaetigen.'
        s=raw_input()
        if s=='ok':
            break
        else:
            del(indexinput_liste[:])
            print '\nIhre Eingabe wurde geloescht, bitte wiederholen Sie den Vorgang.'
            
    else:
        indexinput_liste.append(indexinput)


prn_dateinamen=[]   #Finale Liste der einzulesenden prn Dateinamen in Abhaengigkeit der eingegeben Indexliste
for index,wert in enumerate(Liste_prn_namen):
    if str(index) in indexinput_liste:
        prn_dateinamen.append(wert)
    else:
        continue
    
#print prn_dateinamen


#-------------------------------------------------------------------
#Erstellen einer Liste der letztlich einzulesenden .prn Dateien

Liste_var_prn_alle=[]
for var in range(len(varianten)):
    for zone in range(len(Zonen_AHU)):
        for prn_dataname in prn_dateinamen:
            prndata = glob.glob(varianten[var]+'\\'+Zonen_AHU[zone]+'\\' + prn_dataname)
            Liste_var_prn_alle.append(prndata)
    

var_prn_alle=np.concatenate(np.array(Liste_var_prn_alle))
print var_prn_alle


#-------------------------------------------------------------------
#Einlesen aller .prn Dateien

var_spalten_daten=[]
listeheader=[]

for zone in range(len(var_prn_alle)):
    print var_prn_alle[zone] + ' wird eingelesen!'
    data1=np.genfromtxt(var_prn_alle[zone])
    x = len(data1[zone])
    for i in range(x):            #Einlesen des output files, zuweisen an "liste"
        data2=np.genfromtxt(var_prn_alle[zone],skip_footer=0,skip_header=0,usecols=i)
        var_spalten_daten.append(data2)
    
   
#-------------------------------------------------------------------
#Einlesen Header
   
    headereinleser = open(var_prn_alle[zone],'r') #Liest die erste Zeile der .prn Datei
    line =headereinleser.readline()
    headereinleser.close()
    linesplit=line.split('#      ')[1]    #Wegkurzen von #
    linesplit2=linesplit.split('\n')[0]
    linesplit3=linesplit2.split(' ')
    Header=[]
    zone_datei_name=var_prn_alle[zone].split('\\')
    for a in linesplit3:
        if a=='':
            continue
        else:
            Header.append(zone_datei_name[0]+', ' + zone_datei_name[1] +':'+a)
    listeheader.append(Header)
    
    #if s==5:
        #break
    #s=s+1150206_UVEK
listeheader=np.concatenate(np.array(listeheader))

#-------------------------------------------------------------------
#Aussortieren der Spalten

#nutzspalten=['tairmean']
nutzspalten=['q_heat','q_cool']
#nutzspalten=['tairmean','q_heat','q_cool','q_equip','q_light','q_occ','qwind']
#nutzspalten=['tairmean','q_cool','q_heat','qventil','tair','q_equip','q_light','q_occ','qwind','xco2vol','qhc2zone']
#nutzspalten=['tairmean','q_cool','q_heat','qventil','tair','q_equip','q_light','q_occ','qwind','ventsupvf','tair','t','tout','sf_volflow']
newheader=[]
indexliste=[]
var_spalten_daten_new=[]

for index,wert in enumerate(listeheader): #Jedem Wert in listeheader index zuteilenAussortieren der in nutzspalten angegebenen Ausgabedateiname
    if wert.split(':')[1] in nutzspalten: #Aussortieren der in nutzspalten angegebenen Ausgabedateiname
        newheader.append(wert)
        indexliste.append(index)
    else:
        continue

for spalte in  range(len(var_spalten_daten)): # Entsprechend der indexliste die Spalten der Integerdaten aussortieren
    if spalte in indexliste:
        var_spalten_daten_new.append(var_spalten_daten[spalte])
    else:
        continue

var_spalten_daten_array=np.array(var_spalten_daten_new).transpose() # Spalten mit Zeilen tauschen um schreiben in .csv zu ermoeglichen


#-------------------------------------------------------------------
#Berechnen und Erstellen von Summe,Mittelwert,Minimum,Maximum

var_spalten_daten_rechnung=np.array(var_spalten_daten_new)
summe=[]
mittelwert=[]
minimum=[]
maximum=[]

for column in range(len(var_spalten_daten_rechnung)):
    summe.append(np.sum(var_spalten_daten_rechnung[column]))
    mittelwert.append(np.mean(var_spalten_daten_rechnung[column]))
    minimum.append(np.min(var_spalten_daten_rechnung[column]))
    maximum.append(np.max(var_spalten_daten_rechnung[column]))


beschriftung=['Datum/Variable','Maximum','Minimum','Mittelwert','Summe']



#-------------------------------------------------------------------
#Erstellen des Datums

daypermonth=[31,28,31,30,31,30,31,31,30,31,30,31]
hoursperday=range(24)
date=[]

for month in range(len(daypermonth)):
    for day in range(daypermonth[month]):
        for hour in hoursperday:
            date2=datetime.datetime(2014,month+1,day+1,hour)
            date3=str(date2)
            date.append(date3)


    


#-------------------------------------------------------------------
#-------------------------------------------------------------------
#Erstellen der xlsx Datei
"""
workbook = xlsxwriter.Workbook(dateiname) #ERstellen eines Workbooks
print 'Erstellen Workbook.'
Summant=len(newheader)/len(varianten)
for var in range(len(varianten)):
    print 'Erstellen Worksheet: ' + varianten[var]
    worksheet = workbook.add_worksheet(varianten[var]) #Erstellen eines Worksheets
   
    for besch in range(len(beschriftung)): #Beschriftung von Max, Min, Mittelwert, Summe
        worksheet.write(besch,0,beschriftung[besch])

    for sum in range(len(summe)/len(varianten)):   #Schreiben der Werte für Max, Min, Mittelwert, Summe
        worksheet.write(0,sum+1,maximum[sum+(Summant*var)])
        worksheet.write(1,sum+1,minimum[sum+(Summant*var)])
        worksheet.write(2,sum+1,mittelwert[sum+(Summant*var)])
        worksheet.write(3,sum+1,summe[sum+(Summant*var)])

    for header in range(len(newheader)/len(varianten)): #Schreiben des Headers
        worksheet.write(5,header+1,newheader[header+(Summant*var)])

    for row in range(len(var_spalten_daten_array)): #Schreiben des Datums und der Werte
        for col in range(len(var_spalten_daten_array[row])/len(varianten)):
            worksheet.write(row+6,col+1,var_spalten_daten_array[row][col+(Summant*var)])
            worksheet.write(row+6,0,date[row])
workbook.close()
"""
date25 = []
date25 = date + [1]    
            
workbook = xlsxwriter.Workbook(dateiname) #ERstellen eines Workbooks
print 'Erstellen Workbook.'
Summant=len(newheader)/len(varianten)
for var in range(len(varianten)):
    print 'Erstellen Worksheet: ' + varianten[var]
    worksheet = workbook.add_worksheet(varianten[var]) #Erstellen eines Worksheets
   
    for besch in range(len(beschriftung)): #Beschriftung von Max, Min, Mittelwert, Summe
        worksheet.write(besch,0,beschriftung[besch])

    for sum in range(len(summe)/len(varianten)):   #Schreiben der Werte für Max, Min, Mittelwert, Summe
        worksheet.write(1,sum+1,maximum[sum+(Summant*var)])
        worksheet.write(2,sum+1,minimum[sum+(Summant*var)])
        worksheet.write(3,sum+1,mittelwert[sum+(Summant*var)])
        worksheet.write(4,sum+1,summe[sum+(Summant*var)])

    for header in range(len(newheader)/len(varianten)): #Schreiben des Headers
        worksheet.write(0,header+1,newheader[header+(Summant*var)])

    for row in range(len(var_spalten_daten_array)): #Schreiben des Datums und der Werte
        for col in range(len(var_spalten_daten_array[row])/len(varianten)):
            worksheet.write(row+6,col+1,var_spalten_daten_array[row][col+(Summant*var)])
            worksheet.write(row+6,0,date[row])
            #worksheet.write(row+6,0,date25[row])
workbook.close()


x=raw_input('Finished! Alle .prn Dateien wurden erfolgreich in .csv konvertiert. Zum schliessen der Kommandozeile beliebige Taste druecken.')


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot Python-Script in VBA umschreiben
16.06.2015 11:10:01 Moe Zwahlen
NotSolved