Urejanje CSV in besedilnih datotek v Excel VBA brez poškodbe podatkov
Datum objave:
Osveženo:
Tehnični članki > Urejanje CSV in besedilnih datotek v Excel VBA brez poškodbe podatkov
Status in varna uporaba 2026
Sklep: Obravnavajte navadno besedilno datoteko kot vrstice samo, če je njena oblika resnično usmerjena v vrstico. Polje CSV lahko vsebuje vejice, citate in prelome vrstic, zato uporabite razčlenjevalnik CSV-aware za splošne podatke CSV in pred zamenjavo izvirnika zapišite v začasno datoteko.
Kaj se boš naučil?
- Kako VBA datoteke V/O načini razlikujejo za vnos, dodatek, in izhod.
- Kako kodiranje, slog nove vrstice, zaklepanje datotek in okrevanje napak vplivajo na ponovno pisanje.
- Zakaj enostavno rezanje nizov ni varno za poljubne CSV zapise v slogu RFC.
Za koga je to? Uporabniki Excela vzdržujejo majhne, nadzorovane makroje za obdelavo besedil.
Kontekst za leto 2026: Prvotni makro prikazuje poseben lokalni potek dela in ni bil posplošen v knjižnico CSV brez izgube. Hrbtnite reprezentativne datoteke, preizkusite navedene in večvrstične vrednosti in ne zaženite prepisovanje proti edini kopiji proizvodnje.
Varnostna opomba: Ukazi in konfiguracijski primeri v prvotnem članku niso bili ponovno predvajani v trenutnem proizvodnem okolju. Pred uporabo preveri podprte različice, varnostne kopije, nadzor dostopa in povratne korake v ločenem preskusnem okolju.
Glavni uradni viri
Pregled.
Opisati želim, kako urejati datoteke csv in besedilne datoteke z VBA (Excelovi makri). Članek je namenjen ljudem, ki želijo programirati naslednje naloge
- Že obstoječi datoteki csv ali besedilni datoteki želim dodati vrstice. Besedilo želim dodati na sredino vrstice.
- Želim izbrisati vrstice v že obstoječi datoteki csv ali besedilni datoteki.
Kazalo vsebine
1. Metoda programiranja
FileSystemObject nima možnosti dodajanja sredi vrstice ali brisanja določene vrstice, zato morate to programirati sami.
V nadaljevanju so navedeni referenčni primeri programiranja.
Ker je ustvarjen v funkciji Function, bi ga rad prenesel tako, kot je, s kopiranjem in lepljenjem, klici metod pa bi bili izvedeni iz 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
Če ga želite uporabiti, podajte naslednje argumente.
- filePath: To bo polna pot do datoteke. Primer.)C:\Users\user\Desktop\test\test.txt
- mode: Pass true, false. Če je True, dodajte. Če je false, izbrišite vrstico.
- targetRow: Določa število ciljnih vrstic. V primeru dodajanja je to število vrstic, ki jih je treba dodati, v primeru brisanja pa število vrstic, ki jih je treba izbrisati.
- targetInput: Za naknadne skripte določite vrednost, ki jo je treba dodati. Ne uporablja se za brisanje in je lahko poljubna vrednost. Sprejemljive so tudi prazne črke.
- lineBreakType: Nastavitev znakov nove vrstice. Če je True, vbCrLf. vbLf if False. Skratka, True za datoteke, ustvarjene v operacijskem sistemu Windows.
Kodiranje znakov je UTF-8, če ga želite spremeniti, neposredno spremenite kodo funkcije. Na dveh mestih je ".Charset = "UTF-8"".
Primer izvajanja dejanskega klica funkcije je prikazan spodaj.
Sub test()
'Primer dodajanja test123 v vrstico 5 v datoteki test.txt.(Datoteke, ustvarjene v sistemu Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", True, 5, "test123", True
'Primer brisanja vrstice 5 v datoteki test.txt.(Datoteke, ustvarjene v sistemu Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", False, 5, "", True
End Sub
Če želite pripeti kot csv, je argument vrednosti, ki jo želite pripeti, vrednost, ločena z vejico, in priložena bo vrednost, ločena z vejico. Primer.)"test1,test2,test3"
2. Opis kode.
To je konec navodil za uporabo sistema, ki mu sledi razlaga kode.
Podrobnosti so na voljo v kodi, vendar je okvirni potek postopka naslednji.
Za postscriptum.
- 1: Branje besedilnih datotek na poteh, posredovanih kot argumenti.
- 2: Število znakov do števila vrstic, posredovanih v argumentu, je določeno iz števila novih vrstic. Na primer, v vrstici 5 so pred vrstico 5 štirje prelomi vrstice, zato poiščite položaj, kjer se nahaja četrti prelom vrstice.
- 3: Pridobite informacije do vrstice 4.
- ④(2) Na enak način kot v točki (2) pridobite informacije od vrstice 5 naprej.
- ⑤Informacije iz točke (3), informacije, ki se dodajo kot argument, in informacije iz točke (4) se združijo.
- ⑥Ustvarite datoteko na podlagi informacij iz (5) in jo prepišite.
V primeru izbrisa
- 1: Branje besedilnih datotek na poteh, posredovanih kot argumenti.
- 2: Število znakov do števila vrstic, posredovanih v argumentu, je določeno iz števila novih vrstic. Na primer, v vrstici 5 so pred vrstico 5 štirje prelomi vrstice, zato poiščite položaj, kjer se nahaja četrti prelom vrstice.
- 3: Pridobite informacije do vrstice 4.
- ④(ii) Na enak način kot v točki (ii) pridobite informacije od vrstice 6 naprej.
- ⑤Informacije iz točk (iii) in (iv) se združijo. (Ustvari niz brez pete vrstice.)
- ⑥Ustvarite datoteko na podlagi informacij iz (5) in jo prepišite.
V primeru dodajanja in brisanja sta oba postopka enaka, vendar se namesto urejanja datoteke naredi tako, da se iz prvotne datoteke odstranijo le potrebni podatki, ustvari in shrani pa se nova datoteka.
3. povzetek
Če imate težave pri urejanju datotek csv/besedilnih datotek s programom VBA (Excelovi makri), si oglejte to poglavje.
Upamo, da je bila razlaga koristna.