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
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
■Kontaktuppgifter.