Επεξεργασία αρχείων CSV και κειμένου σε Excel VBA χωρίς αλλοίωση των δεδομένων
Δημοσιεύτηκε:
Ενημερώθηκε:
Άρθρα › Επεξεργασία αρχείων CSV και κειμένου σε Excel VBA χωρίς αλλοίωση των δεδομένων
Κατάσταση το 2026 και ασφαλής χρήση
Συμπέρασμα: Αντιμετωπίστε ένα αρχείο απλού κειμένου ως γραμμές μόνο όταν η μορφή του είναι πραγματικά προσανατολισμένη στη γραμμή. Ένα πεδίο CSV μπορεί να περιέχει κόμματα, εισαγωγικά και αλλαγές γραμμής, επομένως χρησιμοποιήστε έναν αναλυτή με επίγνωση CSV για γενικά δεδομένα CSV και γράψτε σε ένα προσωρινό αρχείο πριν αντικαταστήσετε το πρωτότυπο.
Τι θα μάθετε
- Πώς διαφέρουν οι λειτουργίες εισόδου/εξόδου αρχείων της VBA για είσοδο, προσθήκη και έξοδο.
- Πώς η κωδικοποίηση, το στυλ νέας γραμμής, το κλείδωμα του αρχείου και η ανάκτηση σφαλμάτων επηρεάζουν την επανεγγραφή.
- Γιατί ο απλός διαχωρισμός συμβολοσειράς δεν είναι ασφαλής για αυθαίρετες εγγραφές CSV τύπου RFC.
Για ποιους απευθύνεται: Οι χρήστες του Excel που διατηρούν μικρές, ελεγχόμενες μακροεντολές επεξεργασίας κειμένου.
Ισχύει το 2026: Η αρχική μακροεντολή δείχνει μια συγκεκριμένη τοπική ροή εργασίας και δεν έχει γενικευθεί σε μια βιβλιοθήκη CSV χωρίς απώλειες. Δημιουργήστε αντίγραφα ασφαλείας αντιπροσωπευτικών αρχείων, δοκιμάστε τις τιμές των εισαγωγικών και πολλών γραμμών και μην εκτελέσετε επανεγγραφή στο μοναδικό αντίγραφο παραγωγής.
Σημείωση ασφαλείας: Οι εντολές και τα παραδείγματα ρυθμίσεων του αρχικού άρθρου δεν έχουν εκτελεστεί ξανά σε σύγχρονο περιβάλλον παραγωγής. Πριν από την εφαρμογή, ελέγξτε τις υποστηριζόμενες εκδόσεις, δημιουργήστε αντίγραφα ασφαλείας και προετοιμάστε σχέδιο επαναφοράς σε ξεχωριστό περιβάλλον δοκιμών.
Επίσημες πηγές
Επισκόπηση
Στη συνέχεια περιγράφεται τον τρόπο επεξεργασίας αρχείων csv και κειμένου με VBA (μακροεντολές του Excel). Το άρθρο απευθύνεται σε άτομα που θέλουν να προγραμματίσουν τις ακόλουθες εργασίες
- Θέλω να προσθέσω γραμμές σε ένα ήδη υπάρχον αρχείο csv ή κείμενο. Θέλω να προσθέσω κείμενο στη μέση μιας γραμμής.
- Θέλω να διαγράψω γραμμές σε ένα ήδη υπάρχον αρχείο csv ή κείμενο.
Περιεχόμενα
1. Μέθοδος προγραμματισμού
Εν κατακλείδι, το FileSystemObject δεν έχει τη δυνατότητα να προσθέτει στη μέση μιας γραμμής ή να διαγράφει μια συγκεκριμένη γραμμή, οπότε πρέπει να το προγραμματίσετε μόνοι σας.
Παραδείγματα αναφοράς του προγραμματισμού δίνονται παρακάτω.
Καθώς έχει δημιουργηθεί στη Function, ελπίζω ότι μπορείτε να το φέρετε ως έχει με αντιγραφή και επικόλληση και να το έχετε να καλεί μεθόδους από την Sub.
'Parameter Examples
'## filePath C:\Users\user\Desktop\test\test.txt
'## mode false:delete, true:write
'## targetRow 10
'## targetInput If in write mode, any character
'## lineBreakType false:vbLf, true:vbCrLf
Function editFile(filePath As String, mode As Boolean, targetRow As Long, targetInput As String, lineBreakType As Boolean)
'File existence check
If Dir(filePath) = "" Then
MsgBox "File does not exist!"
Exit Function
End If
Dim tempText As String
Dim tempTextBefore As String
Dim tempTextNew As String
Dim tempTextAfter As String
Dim resultText As String
Dim i As Long
'File read
With CreateObject("ADODB.Stream")
.Charset = "UTF-8"
.Open
.LoadFromFile filePath
tempText = .ReadText
.Close
End With
Dim tempTextBeforeRow As Long
tempTextBeforeRow = 0
For i = 1 To targetRow - 1
If lineBreakType Then
tempTextBeforeRow = InStr(tempTextBeforeRow + 1, tempText, vbCrLf)
Else
tempTextBeforeRow = InStr(tempTextBeforeRow + 1, tempText, vbLf)
End If
Next i
If lineBreakType Then
tempTextBeforeRow = tempTextBeforeRow + 1
End If
tempTextBefore = Left(tempText, tempTextBeforeRow)
'write
If mode Then
tempTextAfter = Mid(tempText, tempTextBeforeRow + 1, Len(tempText))
If lineBreakType Then
tempTextNew = targetInput & vbCrLf
Else
tempTextNew = targetInput & vbLf
End If
resultText = tempTextBefore & tempTextNew & tempTextAfter
'delete
Else
Dim tempTextAfterRow As Long
tempTextAfterRow = 0
For i = 1 To CInt(targetRow)
If lineBreakType Then
tempTextAfterRow = InStr(tempTextAfterRow + 1, tempText, vbCrLf)
Else
tempTextAfterRow = InStr(tempTextAfterRow + 1, tempText, vbLf)
End If
Next i
If lineBreakType Then
tempTextAfterRow = tempTextAfterRow + 1
End If
tempTextAfter = Mid(tempText, tempTextAfterRow + 1, Len(tempText))
resultText = tempTextBefore & tempTextAfter
End If
With CreateObject("ADODB.Stream")
.Charset = "UTF-8"
If lineBreakType Then
.LineSeparator = -1
Else
.LineSeparator = 10
End If
.Open
.WriteText tempTextBefore & tempTextNew & tempTextAfter, 0
.SaveToFile filePath, 2
.Close
End With
End Function
Για να το χρησιμοποιήσετε, δώστε ορίσματα ως εξής.
- filePath···Αυτή θα είναι η πλήρης διαδρομή του αρχείου. Παράδειγμα).C:\Users\user\Desktop\test\test.txt
- mode···Περάστε true, false. Εάν True, προσθέστε. Εάν false, διαγράψτε τη γραμμή.
- targetRow···Καθορίζει τον αριθμό των γραμμών-στόχων. Στην περίπτωση των προσθηκών, είναι ο αριθμός των γραμμών που πρέπει να προστεθούν και στην περίπτωση των διαγραφών, είναι ο αριθμός των γραμμών που πρέπει να διαγραφούν.
- targetInput···Για postscripts, καθορίστε την τιμή που θα προστεθεί. Δεν χρησιμοποιείται για διαγραφή και μπορεί να είναι μια αυθαίρετη τιμή. Τα κενά γράμματα είναι επίσης αποδεκτά.
- lineBreakType···Ρύθμιση των χαρακτήρων νέας γραμμής. Εάν True, vbCrLf. vbLf if False. Εν συντομία, True για αρχεία που δημιουργούνται στα Windows.
Η κωδικοποίηση χαρακτήρων είναι UTF-8, αλλά αν θέλετε να την αλλάξετε, τροποποιήστε απευθείας τον κωδικό Function. Υπάρχουν δύο σημεία όπου ".Charset = "UTF-8"".
Ένα παράδειγμα υλοποίησης μιας πραγματικής κλήσης συνάρτησης παρουσιάζεται παρακάτω.
Sub test()
'Παράδειγμα προσάρτησης του test123 στη γραμμή 5 του test.txt.(Αρχεία που δημιουργήθηκαν στα Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", True, 5, "test123", True
'Παράδειγμα διαγραφής της γραμμής 5 του test.txt.(Αρχεία που δημιουργήθηκαν στα Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", False, 5, "", True
End Sub
Αν θέλετε να επισυνάψετε ως csv, κάντε το όρισμα της τιμής που θα επισυναφθεί μια τιμή διαχωρισμένη με κόμμα και θα επισυναφθεί μια τιμή διαχωρισμένη με κόμμα. Παράδειγμα)."test1,test2,test3"
2. Περιγραφή κωδικού.
Εδώ τελειώνουν οι οδηγίες χρήσης του συστήματος και ακολουθεί η επεξήγηση του κώδικα.
Οι λεπτομέρειες μπορούν να βρεθούν στον κώδικα, αλλά μια πρόχειρη ροή της διαδικασίας έχει ως εξής.
Για υστερόγραφο.
- 1.Ανάγνωση αρχείων κειμένου σε διαδρομές που περνούν ως ορίσματα.
- 2.Ο αριθμός των χαρακτήρων μέχρι τον αριθμό των γραμμών που μεταβιαρχείο JARνται στο όρισμα καθορίζεται από τον αριθμό των νέων γραμμών. Για παράδειγμα, για τη γραμμή 5, υπάρχουν τέσσερα διαλείμματα γραμμής πριν από τη γραμμή 5, οπότε βρείτε τη θέση όπου βρίσκεται το τέταρτο διάλειμμα γραμμής
- 3.Ανάκτηση πληροφοριών μέχρι τη γραμμή 4.
- 4. (2) Αποκτήστε πληροφορίες από τη γραμμή 5 και μετά με τον ίδιο τρόπο όπως στο (2).
- 5.Οι πληροφορίες στο (3), οι πληροφορίες που πρέπει να προστεθούν, οι οποίες περνούν ως όρισμα, και οι πληροφορίες στο (4) συνδυάζονται μαζί.
- 6.Δημιουργήστε ένα αρχείο με βάση τις πληροφορίες του (5) και αντικαταστήστε το αρχείο.
Σε περίπτωση διαγραφής
- 1.Ανάγνωση αρχείων κειμένου σε διαδρομές που περνούν ως ορίσματα.
- 2.Ο αριθμός των χαρακτήρων μέχρι τον αριθμό των γραμμών που μεταβιαρχείο JARνται στο όρισμα καθορίζεται από τον αριθμό των νέων γραμμών. Για παράδειγμα, για τη γραμμή 5, υπάρχουν τέσσερα διαλείμματα γραμμής πριν από τη γραμμή 5, οπότε βρείτε τη θέση όπου βρίσκεται το τέταρτο διάλειμμα γραμμής
- 3.Ανάκτηση πληροφοριών μέχρι τη γραμμή 4.
- 4. (2) Αποκτήστε πληροφορίες από τη γραμμή 6 και μετά με τον ίδιο τρόπο όπως στο (2).
- 5.Οι πληροφορίες στα σημεία iii) και iv) συνδυάζονται μαζί. (Δημιουργήστε μια συμβολοσειρά χωρίς πέμπτη γραμμή).
- 6.Δημιουργήστε ένα αρχείο με βάση τις πληροφορίες του (5) και αντικαταστήστε το αρχείο.
Στην περίπτωση της προσάρτησης και της διαγραφής, και τα δύο είναι τα ίδια, αλλά αντί να γίνει επεξεργασία του αρχείου, γίνεται σαν να εξάγονται μόνο οι απαραίτητες πληροφορίες από το αρχικό αρχείο και να δημιουργείται και να αποθηκεύεται ένα νέο αρχείο.
3. περίληψη
Αν έχετε προβλήματα με την επεξεργασία αρχείων csv/κειμένου με VBA (μακροεντολές του Excel), ανατρέξτε σε αυτήν την ενότητα.
Αυτά είναι τα βασικά βήματα και οι περιορισμοί που πρέπει να ληφθούν υπόψη.
■Άρθρα
■Προφίλ
■Επικοινωνία