Hur man redigerar csv- och textfiler med VBA (Excel-makron).


Datum för offentliggörande:5 juli 2022.



INFOMARTION > Hur man redigerar csv- och textfiler med VBA (Excel-makron).

Översikt.

Jag vill beskriva hur man redigerar csv- och textfiler med VBA (Excel-makron). Artikeln är avsedd för personer som vill programmera följande uppgifter

  • Jag vill lägga till rader i en redan befintlig csv- eller textfil. Jag vill lägga till text i mitten av en rad.
  • Jag vill radera rader i en redan befintlig csv- eller textfil.

Innehållsförteckning

  1. Programmeringsmetod
  2. Kodbeskrivning.
  3. sammanfattning

1. Programmeringsmetod

Sammanfattningsvis kan FileSystemObject inte lägga till i mitten av en rad eller ta bort en specifik rad, så du måste programmera det själv.

Referensexempel på programmering ges nedan.

Eftersom den är skapad i Function skulle jag vilja att den tas in som den är genom att kopiera och klistra in den och att metodanropen görs från 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

För att använda den, ange argument på följande sätt.

  • filePath・・・Detta är den fullständiga sökvägen till filen. Exempel.)C:\Users\user\Desktop\test\test.txt
  • mode・・・Passera sant, falskt. Om True, lägg till. Om den är falsk, raderas raden.
  • targetRow・・・Anger antalet målrader. Vid tillägg är det antalet rader som ska läggas till och vid strykningar är det antalet rader som ska strykas.
  • targetInput・・・För postskript, ange det värde som ska läggas till. Det används inte för radering och kan vara ett godtyckligt värde. Tomma bokstäver är också godtagbara.
  • lineBreakType・・・Inställning av nya radtecken. Om sant, vbCrLf. vbLf om False. En grov förklaring är True för filer som skapats i Windows.

Teckenkodningen är UTF-8, men om du vill ändra den kan du ändra funktionskoden direkt. Det finns två ställen där ".Charset = "UTF-8"".

Nedan visas en exempelimplementering av ett faktiskt funktionsanrop.

Sub test()
 
'Exempel på att lägga till test123 på rad 5 i test.txt.(Filer som skapats i Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", True, 5, "test123", True
 
'Exempel på radering av rad 5 i test.txt.(Filer som skapats i Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", False, 5, "", True
 
End Sub

Om du vill bifoga ett csv-format, gör argumentet för det värde som ska bifogas till ett kommaseparerat värde, så kommer ett kommaseparerat värde att bifogas. Exempel.)"test1,test2,test3"

2. Kodbeskrivning.

Detta är slutet på instruktionerna om hur man använder systemet, följt av en förklaring av koden.

Detaljerna finns i koden, men ett ungefärligt processflöde är följande.

För efterskrift.

  • ①Läser textfiler i sökvägar som anges som argument.
  • ②Antalet tecken upp till det antal rader som anges i argumentet specificeras från antalet nya rader. Till exempel, för rad 5 finns det fyra radbrytningar före rad 5, så hitta positionen där den fjärde radbrytningen finns.
  • ③Hämta information upp till rad 4.
  • ④(2) Samla in information från rad 5 och framåt på samma sätt som i (2).
  • ⑤Informationen i (3), den information som ska läggas till som ett argument och informationen i (4) kombineras tillsammans.
  • ⑥Skapa en fil baserad på informationen i (5) och skriv över filen.

Vid radering

  • ①Läser textfiler i sökvägar som anges som argument.
  • ②Antalet tecken upp till det antal rader som anges i argumentet specificeras från antalet nya rader. Till exempel, för rad 5 finns det fyra radbrytningar före rad 5, så hitta positionen där den fjärde radbrytningen finns.
  • ③Hämta information upp till rad 4.
  • ④(2) Samla in information från rad 6 och framåt på samma sätt som i (2).
  • ⑤Informationen i (iii) och (iv) kombineras med varandra. (Skapa en sträng utan femte rad.)
  • ⑥Skapa en fil baserad på informationen i (5) och skriv över filen.

När det gäller tillägg och borttagning är det samma sak, men i stället för att redigera filen är det som om endast den nödvändiga informationen extraheras från den ursprungliga filen och en ny fil skapas och sparas över.

3. sammanfattning

Om du har problem med att redigera csv/textfiler med VBA (Excel-makros) kan du läsa det här avsnittet.

Tack för att du tittade på till slutet.




■INFORMATION

Klicka här för att komma till den översta sidan med information.


■PROFILE

Klicka här för en profil.


■Kontaktuppgifter.

För frågor om artikeln, vänligen kontakta oss här.