![]() |
Πρόβλημα με πολλαπλό save σε .csv Μιας και γράφτηκα στο forum λέω να εκφράσω σήμερα όλες μου τις απορίες και προβλήματα!!! :icon_phone: Έχω φτιάξει μια μακροεντολή που παίρνει δεδομένα από ένα φύλλο και δημιουργεί αρκετά άλλα φύλλα με κάποιες από τις τιμές του πρώτου. Τα δεδομένα αυτά τα βάζει σε διάφορες στήλες στο κάθε φύλλο. Οι στήλες στα νέα φύλλα δεν γεμίζουν όλες αλλά μόνο κάποιες, πχ οι D,E,H,K και L. Οι υπόλοιπες μένουν κενές. Εγώ χρειάζομαι αυτά τα νέα φύλλα να τα σώνω ένα-ένα σε μορφή .csv. Έτσι, για να γίνεται "αυτόματα" το save, πρόσθεσα μέσα στην Μακροεντολή σε μια ρουτίνα επαναληψης που έχω για να κάνει την αντιγραφή των δεδομένων σε κάθε φύλλο, το εξής: μια μεταβλητή που διαβάζει το όνομα του κάθε φύλλου... name = Worksheets(1).Cells(1, j) και τον κώδικα για την αποθήκευση του κάθε φύλλου με την αντίστοιχη ονομασία... ActiveWorkbook.SaveAs Filename:="E:\Save" + name + ".csv", _ FileFormat:=xlCSV, CreateBackup:=False Ποιο είναι το πρόβλημα όμως. Ενώ αν δεν έχω το αυτόματο save, αλλά πηγαίνω σε κάθε φύλλο και το σώνω ένα-ένα όλα πηγαίνουν -σχεδόν- ρολόι και το csv σώνεται κανονικά (όταν το ανοίγω και πάλι με το excel είναι όλα στην σωστή θέση), όταν κάνω το αυτόματο save, ενώ τα σώνει όλα μαζί, δυστυχώς δεν τα σώνει σωστά. Δηλαδή μαζεύει όλες τις πληροφορίες κάθε γραμμής στην πρώτη στήλη (Α) σε αυτή τη μορφή: Πχ. Ροδέλα Μ25x1,5 - PG11,,,,,1,0501-07-1125,,,,,1,,,,25/02/2011 πράγμα που στη συνέχεια μου προκαλεί προβλήματα. Το "-σχεδόν- ρολόι" πήγαινε στο άλλο προβληματάκι που αντιμετωπίσω. Σε κάποιες περιπτώσεις (δεν έχω καταλάβει πως και γιατί) ακόμα και στο σώσιμο κάθε φύλλου ξεχωριστά (χειροκίνητα), μπορεί να μου κρατάει τις στήλες όπως θα έπρεπε να είναι, αλλά αντί να ξεκινάνε από την στήλη D ας πούμε που είναι η πρώτη με δεδομένα (γιατί θέλω τις προηγούμενες κενές), μετά από το save τα δεδομένα ξεκινάνε από τη στήλη Α. Για αυτό έχω προσπαθήσει τουλάχιστον στην πρώτη γραμμή και στην πρώτη στήλη (Α1) να κάνω εισαγωγή απλά ενός κενού " ", και έτσι διορθώνεται το πρόβλημα. Είναι λίγο ειδική περίπτωση, αν κάποιος γνωρίζει κάτι ας βοηθήσει please... Ευχαριστώ! |
Νίκο καλησπέρα! Έχει σημασία το τί διαχωριστικό που χρησιμοποιείται κατά την αποθήκευση. Αλλιώς θα διαβαστεί από υπολογιστή που χρησιμοποιεί διαχωριστικό το κόμμα (συνήθως αγγλοαμερικανικό) και αλλιώς από άλλον που χρησιμοποιεί ερωτηματικό (semicolon). Θα μπορέσουμε να σου απαντήσουμε με ακρίβεια αν επισυνάψεις ένα παράδειγμα για να έχουμε μια πιο πλήρη εικόνα του προβλήματος. Φιλικά Τάσος |
1 Συνημμένο(α) Καλημέρα, επισυνάπτω το excel με την μακροεντολή που αναφέρω παραπάνω. Τρέχοντας την macro δημιουργεί νέα φύλλα όπου τα ονοματίζει με την επικεφαλίδα κάθε Κωδικού (Α1256,...) (στήλες G,H,I,J,κλπ) και μεταφέρει μόνο τα υλικά που έχουν ποσότητες στο κάθε φύλλο αναλόγως το Κωδικό. Τα δεδομένα που μεταφέρει (ή δημιουργεί) πρέπει να βρίσκονται στις συγκεκριμένες στήλες. Όταν γίνεται αυτόματο save σε csv έτσι όπως το έγω γράψει δυστυχώς τα μεταφέρει όλα στην στήλη Α με την μορφή που αναφέρω παραπάνω. (To save το κάνει σε έναν φάκελο C:\macro\...) Επειδή οι Κωδικοί δεν είναι πάντα ίδιοι και μπορεί να είναι μπόλικες φορές μέσα στο φύλλο, θα βόλευε πολύ το αυτόματο save... |
Καλησπέρα Νίκο! Θέλεις να εξαγεις δηλαδή 4 διαφορετικά αρχεία *.csv, ένα για κάθε κωδικό (στήλες G,H,I,J) που να περιέχουν: [Α/Α], [ΠΕΡΙΓΡΑΦΗ], [ΚΩΔΙΚΟΣ ΥΛΙΚΟΥ], [ΚΩΔΙΚΟΣ], [Ημερομηνία], [TOTAL 3], [Κωδικός (στήλες G,H,I,J, μια κάθε φορά)]; Φιλικά Τάσος |
Να το εξηγήσω λίγο καλύτερα. Υπάρχει ήδη το πρώτο φύλλο ως φόρμα όπου περνάω τα υλικά με τα στοιχεία τους, εως την στήλη Ε ουσιαστικά. [Α/Α], [ΠΕΡΙΓΡΑΦΗ], [ΚΩΔΙΚΟΣ ΥΛΙΚΟΥ], [ΚΩΔΙΚΟΣ], [Ημερομηνία] Μετά χειροκίνητα αναλόγως τους πόσους κωδικούς έχω (μπορεί να είναι πάνω από τέσσερις), συμπληρώνω από την στήλη G και μετά... [Α1256],[Α1257],[...] και τις ποσότητες προς τα κάτω. Στην στήλη F [TOTAL 3] βγάζει αυτόματα το σύνολο των ποσοτήτων για κάθε ανταλλακτικό από όλα τα έργα (στο excelάκι που έχω ανεβάσει έχει χαθεί η συνάρτηση αλλά δεν έχει σημασία) και μετά τρέχοντας την μακροεντολή, διαβάζει την κάθε στήλη από G και μετά και ανοίγει νέα φύλλα με το όνομα του κάθε Κωδικού (Α1256, 57...). Αντιγράφει τις ποσότητες, την περιγραφή και κάποιες άλλες στήλες του Φύλλου1 (Ylika) στα επόμενα αντίστοιχα φύλλα σε συγκεκριμένες στήλες και σώνει το κάθε νέο φύλλο σε αντίστοιχα .csv αρχεία. Ταυτόχρονα γίνονται και άλλα δύο saves, ένα με το πρωτότυπο αρχείο πριν αρχίσει η macro (original) και ένα μόλις τρέξει η macro (teliko). Όλα πάνε καλά, απλά το csv που μου δημιουργεί δεν είναι όπως όταν το σώνω από μόνο του, δεν μου κρατάει τις σωστές στήλες που μου είναι απαραίτητο. Στην ουσία κάτι τρέχει με το save που κάνω, ίσως θέλει κάποια παράμετρο που δεν γνωρίζω (;) ActiveWorkbook.SaveAs Filename:="C:\Macro\Teliko.xls", _ FileFormat:=xlNormal, Password:="", WriteResPassword:="", _ ReadOnlyRecommended:=False, CreateBackup:=False |
Φίλε Νίκο, ο παρακάτω κώδικας
Κώδικας: Option ExplicitΤάσος |
Καλημέρα Τάσο, χίλια ευχαριστώ για την προσπάθεια σου! Είναι πολύ καλή δουλειά, πολύ κοντά σε αυτό που θα ήθελα, αλλά δυστυχώς όχι ακριβώς αυτό! Επειδή πιάσαμε τα δύσκολα, και τον κώδικα ζορίζομαι να τον διαβάσω (θα μπορούσες να γράφεις κάποια σχολιάκια δίπλα ως επεξήγηση?) και να τον παραμετροποιήσω, έτσι θα ήθελα μερικές αλλαγούλες αν δεν σου είναι δύσκολο. Στο csv θα ήθελα να είναι: η ΠΕΡΙΓΡΑΦΗ στην Στήλη C (αντί για B) η Ποσότητα για κάθε Κωδικό(A1256...) στην Στήλη Η (αντί για F) ο ΚΩΔΙΚΟΣ στην Στήλη Ι (αντί για στήλη C) η ΗΜ/ΝΙΑ στην Στήλη R (αντί για στήλη Ε) και τέλος στην στήλη Ν να υπάρχει παντού (για όσες γραμμές έχω υλικά) το 1 Ο Α/Α και ο ΚΩΔΙΚΟΣ ΥΛΙΚΟΥ δεν μου χρειάζονται και όλες οι άλλες στήλες θα ήθελα να είναι κενές. Επίσης θα ήθελα στα csv να ΜΗΝ έχει επικεφαλίδες, αλλά μόνο τα δεδομένα. Το αρχείο αυτό γίνεται εισαγωγή σε κάποιο πρόγραμμα που θέλει τη συγκεκριμένη μορφοποίηση. Συγνώμη αν γίνομαι κουραστικός, ότι σου είναι εύκολο κάνε, εγώ σου είμαι ήδη ευγνώμον!!!! :001_smile: |
Καλημέρα Νίκο! Βάλε σε παρακαλώ τα ονόματα των στηλών σε πλαίσια [ ] όπως θα φαίνονται στο *.csv για να δούμε την ακριβή διάταξη. Αν μεσολαβούν κενές στήλες γράψε [κενή] . Φιλικά Τάσος |
1 Συνημμένο(α) Κατ'αρχήν επειδή γεμίσαμε κωδικούς να τα ξεκαθαρίσουμε λίγο: Κωδικός Υλικού - Δεν χρειάζεται ΚΩΔΙΚΟΣ - είναι ο Κωδικός του ανταλλακτικού ΠΟΣΟΤΗΤΑ - Είναι αυτό που λέμε Κωδικός Α1256, 57, που στην ουσία η στήλη έχει μεν ως επικεφαλίδα τον Κωδικό (ενός έργου), αλλά απο κάτω έχει την ποσότητα κάθε ανταλλακτικού για το κάθε έργο. Αυτό που στο πρώτο φύλλο (στην φόρμα μου) είναι στις στήλες G,H,I,κλπ. Λοιπόν, το csv θέλω να περιέχει: Α:[Κενό], Β:[Κενό], C:[ΠΕΡΙΓΡΑΦΗ], D:[Κενό], E:[Κενό], F:[Κενό], G:[Κενό], H:[Ποσότητα], I:[Κωδικός], J:[Κενό], K:[Κενό], L:[Κενό], M:[Κενό], N:[τον αριθμό 1], O:[Κενό], P:[Κενό], Q:[Κενό], R:[Ημερομηνία], S:[Κενό],... [Κενά...] Όλα τα παραπάνω χωρίς να έχουν επικεφαλίδα στην πρώτη σειρά. Ανεβάζω μια φώτο (δεν με αφήνει να ανεβάσω το csv) με το πως είναι το σωστό όταν τα εξάγω ένα-ένα από τον δικό μου αρχείο. Μόλις δλδ δημιουργηθούν τα νέα φύλλα όπως τα θέλω, πάω σε ένα-ένα χειροκίνητα και κάνω save as... CSV (Οριοθετημένο με κόμματα) (*.csv). Να τονίσω ότι για να μου το βγάλει σωστά με τις στήλες όπως τα θέλω πρέπει πρώτα να κάνω απλά ένα διπλό κλικ στο κελί Α1 (δεν ξέρω, ίσως για να φαίνεται ότι έχει επεξεργαστει?) και μετά να σώσω, γιατί αλλιώς στο csv που εξάγει ξεκινάει την [ΠΕΡΙΓΡΑΦΗ] από την στήλη Α και όχι από την C όπως τη θέλω... :unsure: |
Καλησπέρα Νίκο! Ήσουν κατατοπιστικότατος! Με κάποιες αλλαγές που έγιναν πιστεύω να σε εξυπηρετεί ο παρακάτω κώδικας: Κώδικας: Option ExplicitΤάσος |
Εντάξει θεός! Δεν έχω λόγια!!! :respect: Θα κάτσω να βρω τις... διαφορές τώρα από τον προηγούμενο κώδικα μπας και μάθω τίποτα! Σ'ευχαριστώ πάρα πολύ! Θα επανέλθω σύντομα και με το έτερο ερώτημα μου... |
2 Συνημμένο(α) Φίλε Τάσο, τελικά έχω πρόβλημα και πάλι. Ενώ... χωροταξιακά το csv βγαίνει άψογο, δυστυχώς και πάλι δεν μπορώ να το εισάγω στο πρόγραμμα που θέλω. Ο διαχωρισμός με Tab που βγαζει το αρχείο όπως είναι ο κώδικας σίγουρα δεν κάνει. Δοκίμασα να αφαιρέσω το 2ο True όπως γράφεις στον κώδικα για να έχει διαχωρισμό με κόμματα, αλλά ανοίγοντας το csv με το εξελ μου δείχνει τετραγωνάκια, ανοίγοντας το με txt φαίνεται να έχει κενά αντί για κόμματα (επισυνάπτω φώτος). Αν μπορέσουμε να κάνουμε τα τετραγωνάκια κόμματα νομίζω ότι τελειώσαμε!!! :unsure: |
Καλησπέρα Νίκο! Από ότι βλέπω το πρόβλημα υπάρχει στις ρυθμίσεις του συστήματος σου ή ακόμα και σε γραμματοσειρά. Δοκίμασε: =Code(A1) σε ένα κελί. Η τιμή που θα εμφανίσει θα πρέπει να είναι 59. Το λειτουργικό σου θα πρέπει να έχει διαχωριστικό Λίστας το ερωτηματικό (στον Πίνακα Ελέγχου\Ώρα, Γλώσσα και Περιοχή) για να μπορεί να διαχωριστούν αυτόματα οι στήλες από την Excel. Μπορείς να μας επισυνάψεις αυτό το αρχείο με μερικές γραμμές για να δούμε; Τάσος |
1 Συνημμένο(α) Το φαντάστηκα ότι κάτι θα παίζει με τις ρυθμίσεις μου, αλλά δεν ξέρω τι. Εσύ Τάσο όταν τρέχεις την μακροεντολή στο βγάζει κανονικά με κόμματα το csv? Δοκίμασα το =Code(A1) στο csv αρχείο από το οποίο έχω επισυνάψει τις φώτος (αυτό με τα τετραγωνάκια) και βγάζει αποτέλεσμα 9! Στον Πίνακα Ελέγχου (αν είναι αυτό που φαίνεται στην φώτο) ως seperator έχει ερωτηματικό (ελληνικό). Ποιο αρχείο θέλεις να σου επισυνάψω? Το csv δεν με αφήνει να το ανεβάσω, εκτός κι αν βάλω κάνα λινκ από rapidshare ή κάτι τέτοιο. Να σημειώσω ότι έχω XP SP3 και office 2002 SP3 αν λέει κάτι αυτό, αν και απ'ότι θυμάμαι και σπίτι μου με win7 και office 2007 είχα το ίδιο πρόβλημα, αλλά θα το ξαναδοκιμάσω... |
Νίκο, ο χαρακτήρας 9 είναι το Tab. Για δοκιμή, τρέξε το παρακάτω: Κώδικας: Sub test()Οι μεταβλητές πρέπει να τροποποιηθούν και να εμφανίζονται έτσι: Κώδικας: c4Seperator = ";;;;"Τάσος |
Παράθεση:
Αν μου επιτρέπετε να επέμβω, θα έλεγα ότι το πρόβλημα δεν νομίζω ότι είναι στις ρυθμίσεις του Νίκου, αλλά στο ότι το Excel δεν μπορεί να διαχειριστεί σωστά το οποιοδήποτε διαχωριστικό εκτός του ΤΑΒ σε unicode αρχεία. Φίλε Νίκο ή θα πρέπει να συμβιβαστείς με το Tab σαν διαχωριστικό, ή αν δουλεύεις σε σύστημα με ελληνικά windows, θα έλεγα ότι μπορείς να ξεχάσεις το unicode και να δουλέψεις με ANSI (όχι και πολύ ορθόδοξη σαν πρόταση αυτή η τελευταία). To .csv σαν format στο "Save as" του Excel αν παρατηρήσεις δεν σου δίνει δυνατότητα επιλογής Unicode σε αντίθεση με το .txt δηλαδή το .csv είναι συμβατό με ANSI και όχι Unicode. Το δε .txt χρησιμοποιεί το Tab σαν διαχωριστικό. Για όποιον θέλει περισσότερες πληροφορίες μπορεί να ανατρέξει στην αγγλική wikipedia Comma-separated values - Wikipedia, the free encyclopedia ή να δει τα σχετικά άρθρα περί CSV RFC 4180 - Common Format and MIME Type for Comma-Separated Values (CSV) Files CSV Comma Separated Value File Format - How To - Creativyst - Explored,Designed,Delivered.(sm) Ελπίζω να βοήθησα. Θανάσης ΥΓ για να ανεβάσεις το csv Νίκο απλά μετονόμασε το σε .txt ή συμπίεσε το σε zip |
Τάσο τελικά όντως ήταν δικιά μου η βλακεία! Ξέχασα να σβήσω τα tabs από τα cSeperators! Για την ακρίβεια νόμιζα ότι χρησιμοποιούνται για την μετακίνηση στις στήλες και δεν κατάλαβα ότι βάζοντας το ";" δημιουργείται ο διαχωρισμός. Τώρα έμαθα! Βγαίνει μια χαρά το csv, βέβαια η δοκιμή θα γίνει τη δευτέρα στη δουλειά, αλλά νομίζω ότι είμαστε οκ. Και πάλι σ'ευχαριστώ για τον κόπο και τον χρόνο σου!!! Φίλε gr8styl, με τις λίγες γνώσεις που έχω πάνω στο θέμα το είχα ψιλοψάξει για διαφορές unicode και ansi, αλλά δεν είχα βρει και πολλά πράγματα, τουλάχιστον όχι αρκετά σαφή για να με βοηθήσουν στο πρόβλημα που είχα. Σ'ευχαριστώ πολύ για την ενημέρωση και θα το ψάξω. Εντελώς εγκυκλοπαιδικά τώρα, επειδή έκανα μια ψιλοτροποποίηση στον κώδικα για έναν επιπλέον έλεγχο που χρειάστηκα, και επειδή οι γνώσεις μου στον προγραμματισμό σταματάνε κάπου στα if, for, κλπ, ρίξτε μια ματιά οι πιο έμπειροι στο παρακάτω, πως θα μπορούσε να είναι πιο μαζεμένος ο κώδικας μου? Παράθεση:
|
| Η ώρα είναι 20:05. |
Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.