Hoe kan ik csv en tekst bestanden bewerken met VBA (Excel macro's).


Datum van publicatie:5 juli 2022.



INFOMARTION > Hoe kan ik csv en tekst bestanden bewerken met VBA (Excel macro's).

Overzicht.

Ik wil graag beschrijven hoe je csv en tekst bestanden kunt bewerken met VBA (Excel macro's). Dit artikel is bedoeld voor mensen die de volgende taken willen programmeren

  • Ik wil rijen toevoegen aan een reeds bestaand csv of tekst bestand. Ik wil tekst toevoegen in het midden van een regel.
  • Ik wil regels verwijderen in een reeds bestaand csv- of tekstbestand.

Inhoudsopgave

  1. Programmeer methode
  2. Code Omschrijving.
  3. samenvatting

1. Programmeer methode

Kortom, FileSystemObject heeft niet de mogelijkheid om in het midden van een regel toe te voegen of een specifieke regel te verwijderen, dus je moet het zelf programmeren.

Referentievoorbeelden van programmering worden hieronder gegeven.

Aangezien het is gemaakt in Function, hoop ik dat je het kunt binnenhalen zoals het is door kopiëren en plakken, en het methodes van Sub kunt laten aanroepen.

'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

Om het te gebruiken, geef je de volgende argumenten door.

  • filePath・・・Dit zal het volledige pad van het bestand zijn. Voorbeeld.)C:\Users\user\Desktop\test\test.txt
  • mode・・・Pas waar, onwaar. Indien waar, toevoegen. Indien onwaar, verwijder de rij.
  • targetRow・・・Specificeert het aantal doelrijen. In het geval van toevoegingen is het het aantal toe te voegen regels en in het geval van schrappingen is het het aantal te schrappen regels.
  • targetInput・・・Voor postscripts, specificeer de waarde die moet worden toegevoegd. Het wordt niet gebruikt voor verwijdering en kan een willekeurige waarde zijn. Lege letters zijn ook aanvaardbaar.
  • lineBreakType・・・Instelling van newline-tekens. Indien waar, vbCrLf. vbLf als Onwaar. In het kort, True voor bestanden gemaakt in Windows.

De tekencodering is UTF-8, maar als u die wilt wijzigen, wijzigt u de Functiecode rechtstreeks. Er zijn twee plaatsen waar ".Charset = "UTF-8"".

Hieronder volgt een voorbeeldimplementatie van een werkelijke functie-oproep.

Sub test()
 
'Voorbeeld van het toevoegen van test123 aan regel 5 van test.txt.(Bestanden gemaakt in Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", True, 5, "test123", True
 
'Voorbeeld van het verwijderen van regel 5 van test.txt.(Bestanden gemaakt in Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", False, 5, "", True
 
End Sub

Als u wilt appenderen als een csv, maak dan van het argument van de toe te voegen waarde een door komma's gescheiden waarde, en een door komma's gescheiden waarde zal worden append. Voorbeeld.)"test1,test2,test3"

2. Code Omschrijving.

Dit is het einde van de instructies over het gebruik van het systeem, gevolgd door een uitleg van de code.

De details zijn te vinden in de code, maar een ruwe processtroom is als volgt.

Voor naschrift.

  • ①Lezen van tekstbestanden in paden die als argumenten zijn doorgegeven.
  • ②Het aantal tekens tot aan het aantal regels dat in het argument wordt doorgegeven, wordt bepaald aan de hand van het aantal nieuwe regels. Bijvoorbeeld, voor regel 5 zijn er vier regeleindes, dus zoek de positie waar de vierde regeleindes zich bevindt
  • ③Haal informatie op tot en met regel 4.
  • ④(2) Verzamel informatie vanaf regel 5 op dezelfde wijze als (2).
  • ⑤De informatie in (3), de toe te voegen informatie die als argument wordt doorgegeven en de informatie in (4) worden samengevoegd.
  • ⑥Maak een bestand aan op basis van de informatie in (5) en overschrijf het bestand.

In geval van schrapping

  • ①Lezen van tekstbestanden in paden die als argumenten zijn doorgegeven.
  • ②Het aantal tekens tot aan het aantal regels dat in het argument wordt doorgegeven, wordt bepaald aan de hand van het aantal nieuwe regels. Bijvoorbeeld, voor regel 5 zijn er vier regeleindes, dus zoek de positie waar de vierde regeleindes zich bevindt
  • ③Haal informatie op tot en met regel 4.
  • ④(2) Verzamel informatie vanaf regel 6 op dezelfde manier als (2).
  • ⑤De informatie onder (iii) en (iv) wordt samengevoegd. (Maak een string zonder vijfde regel.)
  • ⑥Maak een bestand aan op basis van de informatie in (5) en overschrijf het bestand.

In het geval van appending en deleting zijn beide hetzelfde, maar in plaats van het bestand te bewerken, wordt het gemaakt alsof alleen de noodzakelijke informatie uit het oorspronkelijke bestand wordt gehaald en wordt een nieuw bestand gemaakt en overgeslagen.

3. samenvatting

Indien u problemen heeft met het bewerken van csv/tekst bestanden met VBA (Excel macro's), raadpleeg dan deze sectie.

Bedankt voor het kijken tot het einde.