Redaguokite CSV ir teksto failus Excel VBA nesugadinant duomenų


Paskelbimo data:

Atnaujinta:


Techniniai straipsniai > Redaguokite CSV ir teksto failus Excel VBA nesugadinant duomenų

2026 m. būsena ir saugus naudojimas

Išvada: paprasto teksto failą laikykite eilutėmis tik tada, kai jo formatas tikrai orientuotas į eilutę. CSV lauke gali būti kablelių, kabučių ir eilučių lūžių, todėl bendriesiems CSV duomenims naudokite CSV suprantantį analizatorių ir įrašykite į laikiną failą prieš pakeisdami originalą.

Ką išmoksite

  • Kaip skiriasi VBA failų įvesties / išvesties režimai, naudojami įvesties, pridėjimo ir išvesties srityse.
  • Kaip kodavimas, naujos eilutės stilius, failų užrakinimas ir klaidų atkūrimas veikia perrašymą.
  • Kodėl paprastas eilučių skaidymas yra nesaugus savavališkiems RFC stiliaus CSV įrašams.

Kam tai skirta: „Excel“ naudotojams, prižiūrintiems mažas, kontroliuojamas teksto apdorojimo makrokomandas.

2026 m. kontekstas: pradinė makrokomanda demonstruoja konkrečią vietinę darbo eigą ir nebuvo apibendrinta į be nuostolių CSV biblioteką. Kurkite atsargines tipinių failų kopijas, patikrinkite kabutes ir kelių eilučių vertes ir nevykdykite perrašymo naudojant vienintelę gamybinę kopiją.

Saugos pastaba: pradiniame straipsnyje pateiktos komandos ir konfigūracijos pavyzdžiai nebuvo pakartotinai vykdomi dabartinėje gamybos aplinkoje. Prieš taikydami, patikrinkite palaikomas versijas, atsargines kopijas, prieigos valdiklius ir atšaukimo veiksmus atskiroje bandymo aplinkoje.

Pagrindiniai oficialūs šaltiniai

Apžvalga.

Norėčiau aprašyti, kaip redaguoti csv ir teksto failus naudojant VBA (Excel makrokomandas). Straipsnis skirtas žmonėms, norintiems užprogramuoti šias užduotis

  • Noriu pridėti eilučių į jau esamą csv arba teksto failą. Noriu pridėti tekstą eilutės viduryje.
  • Noriu ištrinti jau esamo csv arba teksto failo eilutes.

Turinys

  1. Programavimo metodas
  2. Kodas Aprašymas.
  3. santrauka

1. Programavimo metodas

Apibendrinant galima pasakyti, kad FileSystemObject neturi galimybės pridėti eilutės viduryje arba ištrinti konkrečią eilutę, todėl turite tai užprogramuoti patys.

Toliau pateikiami programavimo pavyzdžiai.

Kadangi ji yra sukurta Function, tikiuosi, kad galėsite ją įvesti tokią, kokia ji yra, nukopijuodami ir įklijuodami, ir priversti ją skambinti metodams iš 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

Norėdami jį naudoti, pateikite tokius argumentus.

  • filePath: Tai bus visas failo kelias. Pavyzdys.)C:\Users\user\Desktop\test\test.txt
  • mode: Perduoti true, false. Jei tiesa, pridėkite. Jei false, ištrinkite eilutę.
  • targetRow: Nurodomas tikslinių eilučių skaičius. Papildymo atveju tai yra pridedamų eilučių skaičius, o šalinimo atveju - šalinamų eilučių skaičius.
  • targetInput: Jei tai yra postskriptai, nurodykite pridedamą reikšmę. Jis nenaudojamas ištrynimui ir gali būti bet kokia reikšmė. Tuščios raidės taip pat priimtinos.
  • lineBreakType: Naujos eilutės simbolių nustatymas. Jei tiesa, vbCrLf. vbLf if False. Trumpai tariant, "Windows" sukurtiems failams - "True".

Simbolių koduotė yra UTF-8, bet jei norite ją pakeisti, pakeiskite funkcijos kodą tiesiogiai. Yra dvi vietos, kuriose ".Charset = "UTF-8"".

Toliau pateikiamas faktinio funkcijos iškvietimo įgyvendinimo pavyzdys.

Sub test()
 
'Pavyzdys, kaip prie test.txt 5 eilutės pridėti test123.("Windows" sukurti failai.)
editFile "C:\Users\user\Desktop\test\test.txt", True, 5, "test123", True
 
'Test.txt 5 eilutės ištrynimo pavyzdys.("Windows" sukurti failai.)
editFile "C:\Users\user\Desktop\test\test.txt", False, 5, "", True
 
End Sub

Jei norite pridėti kaip csv, pridėtinės vertės argumentas turi būti kableliais atskirta reikšmė, ir bus pridėta kableliais atskirta reikšmė. Pavyzdys.)"test1,test2,test3"

2. Kodas Aprašymas.

Tai yra sistemos naudojimo instrukcijų pabaiga, po kurios pateikiamas kodo paaiškinimas.

Išsamią informaciją galima rasti kode, tačiau apytikslė proceso eiga yra tokia.

Dėl post scriptum.

  • 1: Tekstinių failų skaitymas keliuose, perduotuose kaip argumentai.
  • 2: Nuo naujų eilučių skaičiaus nurodomas simbolių skaičius iki argumente perduotų eilučių skaičiaus. Pavyzdžiui, 5 eilutėje prieš 5 eilutę yra keturi eilučių pertrūkiai, todėl raskite vietą, kurioje yra ketvirtasis eilučių pertrūkis.
  • 3: Gauti informaciją iki 4 eilutės.
  • ④(2) Surinkite informaciją nuo 5 eilutės ir toliau tokiu pat būdu, kaip ir (2).
  • ⑤Informacija, pateikta (3), informacija, kuri turi būti pridedama kaip argumentas, ir informacija, pateikta (4), sujungiamos kartu.
  • ⑥Sukurkite failą pagal (5) pateiktą informaciją ir jį perrašykite.

Ištrynimo atveju

  • 1: Tekstinių failų skaitymas keliuose, perduotuose kaip argumentai.
  • 2: Nuo naujų eilučių skaičiaus nurodomas simbolių skaičius iki argumente perduotų eilučių skaičiaus. Pavyzdžiui, 5 eilutėje prieš 5 eilutę yra keturi eilučių pertrūkiai, todėl raskite vietą, kurioje yra ketvirtasis eilučių pertrūkis.
  • 3: Gauti informaciją iki 4 eilutės.
  • ④(2) Surinkite informaciją nuo 6 eilutės ir toliau tokiu pat būdu, kaip ir (2).
  • ⑤(iii) ir (iv) punktuose pateikta informacija sujungiama. (Sukurkite eilutę be penktosios eilutės.)
  • ⑥Sukurkite failą pagal (5) pateiktą informaciją ir jį perrašykite.

Pridėjimo ir ištrynimo atveju abu atvejai yra tokie patys, tačiau užuot redagavus failą, iš pradinio failo tarsi paimama tik reikiama informacija ir sukuriamas bei išsaugomas naujas failas.

3. santrauka

Jei kyla problemų redaguojant csv / teksto failus naudojant VBA ("Excel" makrokomandas), žr. šį skyrių.

Dėkojame, kad žiūrėjote iki pabaigos.