Wie man csv- und Textdateien mit VBA (Excel-Makros) bearbeitet.


Datum der Veröffentlichung:5. Juli 2022.



INFOMARTION > Wie man csv- und Textdateien mit VBA (Excel-Makros) bearbeitet.

Überblick.

Ich möchte beschreiben, wie man csv- und Textdateien mit VBA (Excel-Makros) bearbeitet. Dieser Artikel ist für Personen bestimmt, die die folgenden Aufgaben programmieren wollen

  • Ich möchte Zeilen zu einer bereits vorhandenen CSV- oder Textdatei hinzufügen. Ich möchte Text in der Mitte einer Zeile hinzufügen.
  • Ich möchte Zeilen in einer bereits vorhandenen csv- oder Textdatei löschen.

Inhaltsübersicht

  1. Programmiermethode
  2. Code Beschreibung.
  3. Zusammenfassung

1. Programmiermethode

Zusammenfassend lässt sich sagen, dass FileSystemObject nicht in der Lage ist, in der Mitte einer Zeile anzuhängen oder eine bestimmte Zeile zu löschen, so dass Sie dies selbst programmieren müssen.

Nachstehend finden Sie Beispiele für die Programmierung.

Da es in Function erstellt wird, hoffe ich, dass Sie es durch Kopieren und Einfügen einfügen und die Methode von Sub aufrufen können.

'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

Um es zu verwenden, geben Sie die folgenden Argumente an.

  • filePath・・・Dies ist der vollständige Pfad der Datei. Beispiel.)C:\Users\user\Desktop\test\test.txt
  • mode・・・Pass true, false. Wenn True, hinzufügen. Wenn false, wird die Zeile gelöscht.
  • targetRow・・・Gibt die Anzahl der Zielzeilen an. Bei Hinzufügungen handelt es sich um die Anzahl der hinzuzufügenden Zeilen, bei Löschungen um die Anzahl der zu löschenden Zeilen.
  • targetInput・・・Bei Postskripten geben Sie den Wert an, der angehängt werden soll. Er wird nicht für die Löschung verwendet und kann ein beliebiger Wert sein. Auch leere Buchstaben sind zulässig.
  • lineBreakType・・・Setzen von Zeilenumbruchzeichen. Wenn True, vbCrLf. vbLf if False. Kurz gesagt: Wahr für Dateien, die in Windows erstellt wurden.

Die Zeichenkodierung ist UTF-8, aber wenn Sie sie ändern wollen, müssen Sie den Funktionscode direkt ändern. Es gibt zwei Stellen, an denen ".Charset = "UTF-8"" steht.

Ein Beispiel für die Implementierung eines aktuellen Funktionsaufrufs ist unten dargestellt.

Sub test()
 
'Beispiel für das Anhängen von test123 an Zeile 5 von test.txt.(In Windows erstellte Dateien.)
editFile "C:\Users\user\Desktop\test\test.txt", True, 5, "test123", True
 
'Beispiel für das Löschen der Zeile 5 von test.txt.(In Windows erstellte Dateien.)
editFile "C:\Users\user\Desktop\test\test.txt", False, 5, "", True
 
End Sub

Wenn Sie als csv-Datei anhängen möchten, geben Sie als Argument für den anzuhängenden Wert einen durch Komma getrennten Wert an, und es wird ein durch Komma getrennter Wert angehängt. Beispiel.)"test1,test2,test3"

2. Code Beschreibung.

Dies ist das Ende der Anleitung zur Verwendung des Systems, gefolgt von einer Erklärung des Codes.

Die Einzelheiten sind im Code zu finden, aber ein grober Ablauf sieht wie folgt aus.

Für das Postskriptum.

  • ①Lesen von Textdateien in den als Argumente übergebenen Pfaden.
  • ②Die Anzahl der Zeichen bis zur Anzahl der im Argument übergebenen Zeilen wird durch die Anzahl der Zeilenumbrüche bestimmt. In Zeile 5 gibt es beispielsweise vier Zeilenumbrüche vor Zeile 5, also suchen Sie die Position, an der sich der vierte Zeilenumbruch befindet
  • ③Abrufen von Informationen bis zu Zeile 4.
  • ④(2) Erfassen Sie die Informationen ab Zeile 5 auf die gleiche Weise wie unter (2).
  • ⑤Die Informationen in (3), die als Argument übergebenen anzufügenden Informationen und die Informationen in (4) werden miteinander kombiniert.
  • ⑥Erstellen Sie eine Datei auf der Grundlage der Informationen in (5) und überschreiben Sie die Datei.

Im Falle der Löschung

  • ①Lesen von Textdateien in den als Argumente übergebenen Pfaden.
  • ②Die Anzahl der Zeichen bis zur Anzahl der im Argument übergebenen Zeilen wird durch die Anzahl der Zeilenumbrüche bestimmt. In Zeile 5 gibt es beispielsweise vier Zeilenumbrüche vor Zeile 5, also suchen Sie die Position, an der sich der vierte Zeilenumbruch befindet
  • ③Abrufen von Informationen bis zu Zeile 4.
  • ④(2) Erfassen Sie die Informationen ab Zeile 6 auf die gleiche Weise wie unter (2).
  • ⑤Die Informationen in (iii) und (iv) werden miteinander kombiniert. (Erstellen Sie eine Zeichenkette ohne fünfte Zeile.)
  • ⑥Erstellen Sie eine Datei auf der Grundlage der Informationen in (5) und überschreiben Sie die Datei.

Im Falle des Anhängens und Löschens ist beides dasselbe, aber anstatt die Datei zu bearbeiten, werden nur die notwendigen Informationen aus der Originaldatei extrahiert und eine neue Datei erstellt und gespeichert.

3. Zusammenfassung

Wenn Sie Probleme bei der Bearbeitung von csv-/Textdateien mit VBA (Excel-Makros) haben, lesen Sie bitte diesen Abschnitt.

Danke, dass Sie bis zum Ende zugesehen haben.