2017-09-11 1 views
0

Je suis novice en programmation et pour terminer mon BA, l'une de mes «quêtes» consiste à écrire un programme d'enregistrement continu des données à partir d'un Oxygen-Meter. Jusqu'à présent, j'ai réussi à obtenir les données, les écrire dans un fichier Excel pour une durée prédéfinie. Malheureusement, les valeurs sont toujours écrites en une seule ligne donc je vois juste la dernière mesure dans Excel. Ma question est: Comment puis-je dire à mon programme de mettre chaque mesure dans une nouvelle rangée? Merci d'avance pour votre aide et s'il vous plaît être paitient avec moi j'ai commencé la programmation il y a 5 jours.Comment débuter une nouvelle ligne dans Excel pendant l'enregistrement continu des données

import serial 
import time 
import xlsxwriter 
port = "COM1" 
baud = 2400 
bytesize = serial.EIGHTBITS 
parity = serial.PARITY_EVEN 
stopbits = serial.STOPBITS_ONE 
ser = serial.Serial(port, baud, bytesize, parity, stopbits, timeout=1) 

while ser.isOpen(): 

ser.write("O") 
time.sleep(5)    #Messung wird aller()s abgerufen 
while ser.inWaiting()>0: 

    s = ser.readline() 
    Nummer = s[2:4] 
    Konzentration = s[9:13] + " mg/l" 
    Temperatur = s[19:23] + " °" + s[25:26] 
    Temperatur2 = s[19:23] 
    Zeit = s[27:32] + " Uhr" 
    Datum = s[33:38] + ".2017" 
    t = Nummer+" "+Konzentration +" "+Temperatur +" "+Zeit +" "+Datum 

    print t 

    workbook = xlsxwriter.Workbook ('Sauerstoffmessung.xlsx') 
    worksheet = workbook.add_worksheet() 

    row=0 
    col=0 
    seq = [] 
    count = 1 

    rowheaders =['Nummer', 'Konzentration', 'Temperatur', 'Zeit', 'Datum'] 
    rowvalues = [Nummer, Konzentration, Temperatur2, Zeit, Datum] 


    worksheet.write_row(row, col, tuple(rowheaders)) 
    worksheet.write_row(row, col, tuple(rowvalues)) 


    workbook.close() 

if Zeit == "08:38 Uhr": 
     ser.close() 
     print "Uebertragung beendet" 

Tout d'abord, merci. Deuxièmement, ci-dessous est mon nouveau code. Maintenant, chaque nouvelle mesure reçue est écrite dans une nouvelle ligne, mais les anciennes disparaissent. J'ai essayé de comprendre par moi-même, mais j'ai fini par l'aggraver. Y at-il une chance de dire au programme de garder les données dans la ligne écrite et d'écrire la mesure suivante dans la rangée suivante?

import serial 
import time 
import xlsxwriter 
import io 

port = "COM1" 
baud = 2400 
bytesize = serial.EIGHTBITS 
parity = serial.PARITY_EVEN 
stopbits = serial.STOPBITS_ONE 
row=0 
col=0 

ser = serial.Serial(port, baud, bytesize, parity, stopbits, timeout=1) 

while ser.isOpen(): 

ser.write("O") 
time.sleep(5)    #Messung wird aller()s abgerufen 

workbook = xlsxwriter.Workbook ('Sauerstoffmessung.xlsx') 
worksheet = workbook.add_worksheet() 

rowheaders =['Nummer', 'Konzentration', 'Temperatur', 'Zeit', 'Datum'] 

worksheet.write_row(0, 0, tuple(rowheaders)) 

while ser.inWaiting()>0: 

    s = ser.readline() 
    Nummer = s[2:4] 
    Konzentration = s[9:13] + " mg/l" 
    Temperatur = s[19:23] + " °" + s[25:26] 
    Temperatur2 = s[19:23] 
    Zeit = s[27:32] + " Uhr" 
    Datum = s[33:38] + ".2017" 
    t = Nummer+" "+Konzentration +" "+Temperatur +" "+Zeit +" "+Datum 

    print t 

    rowvalues = [Nummer, Konzentration, Temperatur2, Zeit, Datum] 

    worksheet.write_row(row, col, tuple(rowvalues)) 

    row += 1 

if Zeit == "08:38 Uhr": 
     ser.close() 
     print "Uebertragung beendet" 
     workbook.close() 
+0

Je pense que vous devrez peut-être déplacer les 'workbook()' create et et 'workbook.add_worksheet()' en dehors de la première boucle while. – jmcnamara

Répondre

0

Vous n'incrémente pas votre ligne contre

import serial 
import time 
import xlsxwriter 
port = "COM1" 
baud = 2400 
bytesize = serial.EIGHTBITS 
parity = serial.PARITY_EVEN 
stopbits = serial.STOPBITS_ONE 
ser = serial.Serial(port, baud, bytesize, parity, stopbits, timeout=1) 
row=0 
col=0 

while ser.isOpen(): 

ser.write("O") 
time.sleep(5)    #Messung wird aller()s abgerufen 
while ser.inWaiting()>0: 

    s = ser.readline() 
    Nummer = s[2:4] 
    Konzentration = s[9:13] + " mg/l" 
    Temperatur = s[19:23] + " °" + s[25:26] 
    Temperatur2 = s[19:23] 
    Zeit = s[27:32] + " Uhr" 
    Datum = s[33:38] + ".2017" 
    t = Nummer+" "+Konzentration +" "+Temperatur +" "+Zeit +" "+Datum 

    print t 

    workbook = xlsxwriter.Workbook ('Sauerstoffmessung.xlsx') 
    worksheet = workbook.add_worksheet() 

    seq = [] 
    count = 1 

    rowheaders =['Nummer', 'Konzentration', 'Temperatur', 'Zeit', 'Datum'] 
    rowvalues = [Nummer, Konzentration, Temperatur2, Zeit, Datum] 


    worksheet.write_row(row, col, tuple(rowheaders)) 
    worksheet.write_row(row, col, tuple(rowvalues)) 

    row+=1 
    workbook.close() 

if Zeit == "08:38 Uhr": 
     ser.close() 
     print "Uebertragung beendet" 
+0

Désolé je ne comprends pas –

0

J'ai trouvé hier solution mais n'a pas eu le temps de poster. Demain je vais télécharger le code. La dernière chose que je lutte avec, c'est que l'écrivain csv semble écrire chaque valeur dans chaque cellule Excel avec un 'au début, donc Excel ne reconnaît pas ces valeurs en tant que nombres et ne crée donc pas de graphique.