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.')
|