giannis89 Δημοσιεύτηκε Δεκέμβριος 4 , 2012 Συγγραφέας Δημοσιεύτηκε Δεκέμβριος 4 , 2012 Κατ' αρχάς, ευχαριστώ swordfish για το χρόνο σου, Δυστυχώς, ίσως δεν το είχα εξηγήσει κι εγώ σαφώς από την αρχή, δεν ήταν αυτό το πρόβλημά μου. Δηλαδή, δε με ενδιαφέρει τα μηδενικά να γίνουν ενδιάμεσες τιμές. Με ενδιαφέρει να προστεθούν γραμμές στην ασυνέχεια του χρόνου (1η στήλη) κι ας προκύψουν κενά δεδομένα στις υπόλοιπες στήλες (αυτά θα τα προσθέσω αργότερα). Το εξηγώ καλύτερα και με παράδειγμα στο προτελευταίο μου μήνυμα. Επίσης, δεν καλύπτεται η προϋπόθεση στο πρόγραμμα σου να είναι μηδέν τα δεδομένα της δεύτερης στήλης στις ασυνέχειες. Στο δείγμα που ανέβασα, έτυχε να υπάρχουν μηδενικά επειδή η ασυνέχεια χρόνου έπεσε βράδυ και το ρεύμα του φωτοβολταϊκού ήταν μηδέν. Σε άλλα σημεία υπάρχουν ασυνέχειες κατά τη διάρκεια της ημέρας (από σφάλμα καταγραφέα) χωρίς οι τιμές της δεύτερης στήλης να μηδενίζονται (βλ. παράδειγμα στο προηγούμενο μήνυμα). Και πάλι ευχαριστώ για κάθε προσπάθεια, ξέρω ότι δε ζητάω και το πιο απλό πράγμα...
Sw0rdf1sh Δημοσιεύτηκε Δεκέμβριος 4 , 2012 Δημοσιεύτηκε Δεκέμβριος 4 , 2012 (edited) Είναι πιο απλό αν δεν θες να επεξεργαστείς τις ήδη υπάρχουσες γραμμές. Δες στο συμπιεσμένο τα: addlines_fromprev.php (προσθέτει με βάση την προηγούμενη γραμμη της συνέχειας τις τιμές) addedlines_withzeros.php (προσθέτει την γραμμή με την ένδειξη ημερομηνίας αλλά με μηδενικές τιμές) τα οποία δημιουργούν 2 αρχεία: addedlines_fromprev.csv addedlines_withzeros.csv Στο xls που έχεις ανεβάσει μετά την 14η γραμμή υπήρξαν 574 ασυνέχειες. (έχεις χάσει δηλαδή 574λεπτά) Για να κάνω τις μετατροπές πιο εύκολα με το unixtimestamp στο αρχικό xls και πριν εξάγω σε csv αυτή τη φορά μετέτρεψα την μορφή ημερομηνίας σε: Μήνα/Ημέρα/Χρόνο Ώρα:λεπτά (στο excel μορφοποίηση ->ημερομηνία -> τύπος: μ/η/εεεε ω:λλ) Το έχω αντιμετωπίσει το πρόβλημα σε PLC όπου αν το δούμε σα γραφική παράσταση το σύνολο τιμών μιας στήλης τότε στη διακοπή άλλος θέλει η γραφική παράσταση να συνεχίζει οριζόντια άλλος θέλει να μηδενίζεται. Το έχω αντιμετωπίσει και για τις 2 περιπτώσεις. asynexeia1.rar Edited Δεκέμβριος 4 , 2012 by Sw0rdf1sh 1
Samdreamth Δημοσιεύτηκε Δεκέμβριος 4 , 2012 Δημοσιεύτηκε Δεκέμβριος 4 , 2012 Λοιπόν, έγραψα λίγο κώδικα στα γρήγορα. Ο παρακάτω κώδικας, βρίσκει την τελευταία τιμή της στήλης Α και στην συνέχεια ανεβαίνει προς τα πάνω. Αν βρει ασυνέχεια στον χρόνο, εισάγει κενές γραμμές και το χρονικό διάστημα. Αν θες, δες και το επισυναπτόμενο αρχείο. Στις κίτρινες γραμμές υπάρχει ασυνέχεια. Αν πατήσεις το κουμπί run οι ασυνέχειες εξαφανίζονται... >Sub TimeDiscontinuity() Dim LastRow As Long Dim i As Long Dim insRows As Long Dim j As Long 'Inserts missing time values, starting from the last row in column A. Application.ScreenUpdating = False With ActiveSheet LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row End With For i = LastRow To 3 Step -1 If Cells(i, 1).Value - Cells(i - 1, 1).Value > 6.94444446708076E-04 Then insRows = ((Cells(i, 1).Value - Cells(i - 1, 1).Value) / 6.94444446708076E-04) - 1 '6.94444446708076E-04 = (1 / (24 * 60)) ActiveSheet.Rows(i & ":" & i + insRows - 1).Insert For j = i To i + insRows - 1 Cells(j, 1) = Cells(j - 1, 1) + 6.94444446708076E-04 Next j End If Next i MsgBox "The missing time values were inserted!", vbInformation, "Done" Application.ScreenUpdating = True End Sub Time Discontinuity.zip 2
Samdreamth Δημοσιεύτηκε Δεκέμβριος 4 , 2012 Δημοσιεύτηκε Δεκέμβριος 4 , 2012 Καλησπέρα . Τα ζητούμενα : Ουσιαστικά , για να εισαχθεί μια νέα γραμμή (που δεν θα είναι μία) θα πρέπει να υπάρχουν ισάριθμες κενές γραμμές στο φύλλο εργασίας . Αν το πλήθος των γραμμών του αρχείου υπερβαίνει τις 1.048.576 , δεν πρόκειται να γίνει δουλειά στο Excel 2007 γιατί αυτό είναι και το όριο γραμμών που υποστηρίζει . Συζητάμε λοιπόν ότι η μακροεντολή ίσως να πρέπει να "τρέξει" στο Excel 2010 το οποίο πρακτικά δεν έχει όριο στο πλήθος των γραμμών . Θα το δω αναλυτικότερα και αν έχω κάποιο θετικό αποτέλεσμα θα επανέλθω. Γιώργο δεν ισχύει αυτό... Το Excel 2010 έχει τον ίδιο αριθμό γραμμών με το Excel 2007. Δες και εδώ: http://office-watch....t/n.aspx?a=1408 Εσύ όμως ξέρω ότι χρησιμοποιείς το 2003....
giannis89 Δημοσιεύτηκε Δεκέμβριος 4 , 2012 Συγγραφέας Δημοσιεύτηκε Δεκέμβριος 4 , 2012 Το θέμα είναι η εύρεση της συνάρτησης όπως σωστά εντοπίζεις και όχι η αναβάθμιση του Excel σε έκδοση 2013 όπου δεν θα μπορέσω να δοκιμάσω την μακροεντολή πριν στη στείλω . Εσύ όμως ξέρω ότι χρησιμοποιείς το 2003.... A! Γι' αυτό δεν του άρεσε που εγκατέστησα το 2013, είναι 10 χρόνια πίσω... Είναι πιο απλό αν δεν θες να επεξεργαστείς τις ήδη υπάρχουσες γραμμές. Δες στο συμπιεσμένο τα: addlines_fromprev.php (προσθέτει με βάση την προηγούμενη γραμμη της συνέχειας τις τιμές) addedlines_withzeros.php (προσθέτει την γραμμή με την ένδειξη ημερομηνίας αλλά με μηδενικές τιμές) τα οποία δημιουργούν 2 αρχεία: addedlines_fromprev.csv addedlines_withzeros.csv Και πάλι δεν είναι ακριβώς αυτό που ψάχνω. Σωστά συμπλήρωσες τις χρονικές στιγμές που λείπουν, απλά δε θέλω να συμπληρωθεί τίποτα στα δεδομένα στις υπόλοιπες στήλες γιατί αυτό θα πρέπει να το κάνω εγώ χειρωνακτικά κατά περίπτωση Επίσης, δεν μου είπες με ποιο πρόγραμμα τρέχεις τον αλγόριθμο που έγραψες. Άνοιξα απλά το αρχείο με notepad και είδα τον κώδικα. Δεν ξέρω όμως πού θα μπορούσα να τον εκτελέσω αν του κάνω κάποιες τροποποιήσεις. Σε ευχαριστώ και πάλι για το χρόνο σου!! >Sub TimeDiscontinuity() Dim LastRow As Long Dim i As Long Dim insRows As Long Dim j As Long 'Inserts missing time values, starting from the last row in column A. Application.ScreenUpdating = False With ActiveSheet LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row End With For i = LastRow To 3 Step -1 If Cells(i, 1).Value - Cells(i - 1, 1).Value > 6.94444446708076E-04 Then insRows = ((Cells(i, 1).Value - Cells(i - 1, 1).Value) / 6.94444446708076E-04) - 1 '6.94444446708076E-04 = (1 / (24 * 60)) ActiveSheet.Rows(i & ":" & i + insRows - 1).Insert For j = i To i + insRows - 1 Cells(j, 1) = Cells(j - 1, 1) + 6.94444446708076E-04 Next j End If Next i MsgBox "The missing time values were inserted!", vbInformation, "Done" Application.ScreenUpdating = True End Sub Αυτό έψαχνα!! Ευχαριστώ πολύ Samdreamth! Με βοήθησες πολύ με αυτό! Τη δοκίμασα στο δείγμα μου και δουλεύει. Φτάνει μόνο να μην κρασάρει το Excel με όλα τα δεδομένα, γιατί θα πρέπει να το σπάσω σε μικρότερα αρχεία...
Sw0rdf1sh Δημοσιεύτηκε Δεκέμβριος 4 , 2012 Δημοσιεύτηκε Δεκέμβριος 4 , 2012 Στο addlines_withzeros.php στη γραμμή 40 αντι για μηδέν βάζεις ένα κενό ή σβήνεις το 0 και αφήνεις μόνο το ; >${"nextline".$z} .= ";0"; //Εδώ προστίθεται η τιμή 0 σε κάθε στήλη
Recommended Posts
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε προκειμένου να αφήσετε κάποιο σχόλιο
Πρέπει να είστε μέλος για να μπορέσετε να αφήσετε κάποιο σχόλιο
Δημιουργία λογαριασμού
Κάντε μια δωρεάν εγγραφή στην κοινότητά μας. Είναι εύκολο!
Εγγραφή νέου λογαριασμούΣύνδεση
Εάν έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα