Πώς να επεξεργάζεστε αρχεία csv και κειμένου με VBA (μακροεντολές του Excel).


Ημερομηνία δημοσίευσης:5 Ιουλίου 2022.



INFOMARTION > Πώς να επεξεργάζεστε αρχεία csv και κειμένου με VBA (μακροεντολές του Excel).

Επισκόπηση.

Θα ήθελα να περιγράψω τον τρόπο επεξεργασίας αρχείων csv και κειμένου με VBA (μακροεντολές του Excel). Το άρθρο απευθύνεται σε άτομα που θέλουν να προγραμματίσουν τις ακόλουθες εργασίες

  • Θέλω να προσθέσω γραμμές σε ένα ήδη υπάρχον αρχείο csv ή κείμενο. Θέλω να προσθέσω κείμενο στη μέση μιας γραμμής.
  • Θέλω να διαγράψω γραμμές σε ένα ήδη υπάρχον αρχείο csv ή κείμενο.

Πίνακας περιεχομένων

  1. Μέθοδος προγραμματισμού
  2. Περιγραφή κωδικού.
  3. περίληψη

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. Περιγραφή κωδικού.

Εδώ τελειώνουν οι οδηγίες χρήσης του συστήματος και ακολουθεί η επεξήγηση του κώδικα.

Οι λεπτομέρειες μπορούν να βρεθούν στον κώδικα, αλλά μια πρόχειρη ροή της διαδικασίας έχει ως εξής.

Για υστερόγραφο.

  • ①Ανάγνωση αρχείων κειμένου σε διαδρομές που περνούν ως ορίσματα.
  • ②Ο αριθμός των χαρακτήρων μέχρι τον αριθμό των γραμμών που μεταβιβάζονται στο όρισμα καθορίζεται από τον αριθμό των νέων γραμμών. Για παράδειγμα, για τη γραμμή 5, υπάρχουν τέσσερα διαλείμματα γραμμής πριν από τη γραμμή 5, οπότε βρείτε τη θέση όπου βρίσκεται το τέταρτο διάλειμμα γραμμής
  • ③Ανάκτηση πληροφοριών μέχρι τη γραμμή 4.
  • ④(2) Αποκτήστε πληροφορίες από τη γραμμή 5 και μετά με τον ίδιο τρόπο όπως στο (2).
  • ⑤Οι πληροφορίες στο (3), οι πληροφορίες που πρέπει να προστεθούν, οι οποίες περνούν ως όρισμα, και οι πληροφορίες στο (4) συνδυάζονται μαζί.
  • ⑥Δημιουργήστε ένα αρχείο με βάση τις πληροφορίες του (5) και αντικαταστήστε το αρχείο.

Σε περίπτωση διαγραφής

  • ①Ανάγνωση αρχείων κειμένου σε διαδρομές που περνούν ως ορίσματα.
  • ②Ο αριθμός των χαρακτήρων μέχρι τον αριθμό των γραμμών που μεταβιβάζονται στο όρισμα καθορίζεται από τον αριθμό των νέων γραμμών. Για παράδειγμα, για τη γραμμή 5, υπάρχουν τέσσερα διαλείμματα γραμμής πριν από τη γραμμή 5, οπότε βρείτε τη θέση όπου βρίσκεται το τέταρτο διάλειμμα γραμμής
  • ③Ανάκτηση πληροφοριών μέχρι τη γραμμή 4.
  • ④(2) Αποκτήστε πληροφορίες από τη γραμμή 6 και μετά με τον ίδιο τρόπο όπως στο (2).
  • ⑤Οι πληροφορίες στα σημεία iii) και iv) συνδυάζονται μαζί. (Δημιουργήστε μια συμβολοσειρά χωρίς πέμπτη γραμμή.)
  • ⑥Δημιουργήστε ένα αρχείο με βάση τις πληροφορίες του (5) και αντικαταστήστε το αρχείο.

Στην περίπτωση της προσάρτησης και της διαγραφής, και τα δύο είναι τα ίδια, αλλά αντί να γίνει επεξεργασία του αρχείου, γίνεται σαν να εξάγονται μόνο οι απαραίτητες πληροφορίες από το αρχικό αρχείο και να δημιουργείται και να αποθηκεύεται ένα νέο αρχείο.

3. περίληψη

Αν έχετε προβλήματα με την επεξεργασία αρχείων csv/κειμένου με VBA (μακροεντολές του Excel), ανατρέξτε σε αυτήν την ενότητα.

Σας ευχαριστούμε που παρακολουθήσατε μέχρι το τέλος.