Ako upravovať csv a textové súbory pomocou VBA (makrá programu Excel).


Dátum vydania:5. júla 2022.



INFOMARTION > Ako upravovať csv a textové súbory pomocou VBA (makrá programu Excel).

Prehľad.

Chcel by som popísať, ako upravovať csv a textové súbory pomocou VBA (makrá Excelu). Článok je určený pre ľudí, ktorí chcú naprogramovať tieto úlohy

  • Chcem pridať riadky do už existujúceho csv alebo textového súboru. Chcem pridať text doprostred riadku.
  • Chcem odstrániť riadky v už existujúcom csv alebo textovom súbore.

Obsah

  1. Spôsob programovania
  2. Kód Popis.
  3. zhrnutie

1. Spôsob programovania

Na záver, FileSystemObject nemá možnosť pripojenia uprostred riadku alebo vymazania konkrétneho riadku, takže si to musíte naprogramovať sami.

Referenčné príklady programovania sú uvedené nižšie.

Keďže je vytvorená vo funkcii Function, chcel by som, aby bola prenesená tak, ako je, pomocou kopírovania a vkladania a aby sa volania metód uskutočňovali zo 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

Ak ho chcete použiť, odovzdajte argumenty takto.

  • filePath・・・Toto bude úplná cesta k súboru. Príklad.)C:\Users\user\Desktop\test\test.txt
  • mode・・・Odovzdať true, false. Ak je to pravda, pridajte. Ak je false, riadok sa odstráni.
  • targetRow・・・Určuje počet cieľových riadkov. V prípade pridávania je to počet riadkov, ktoré sa majú pridať, a v prípade odstraňovania je to počet riadkov, ktoré sa majú odstrániť.
  • targetInput・・・V prípade postskriptov zadajte hodnotu, ktorá sa má pridať. Nepoužíva sa na vymazanie a môže mať ľubovoľnú hodnotu. Prijateľné sú aj prázdne písmená.
  • lineBreakType・・・Nastavenie znakov nového riadku. Ak je to pravda, vbCrLf. vbLf ak False. Stručne povedané, True pre súbory vytvorené v systéme Windows.

Kódovanie znakov je UTF-8, ale ak ho chcete zmeniť, upravte priamo kód funkcie. Existujú dve miesta, kde ".Charset = "UTF-8"".

Príklad implementácie skutočného volania funkcie je uvedený nižšie.

Sub test()
 
'Príklad pridania test123 do riadku 5 súboru test.txt.(Súbory vytvorené v systéme Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", True, 5, "test123", True
 
'Príklad odstránenia riadku 5 z test.txt.(Súbory vytvorené v systéme Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", False, 5, "", True
 
End Sub

Ak chcete pripojiť ako csv, zadajte ako argument hodnoty, ktorá sa má pripojiť, hodnotu oddelenú čiarkou a pripojí sa hodnota oddelená čiarkou. Príklad.)"test1,test2,test3"

2. Kód Popis.

Týmto sa končí návod na používanie systému, po ktorom nasleduje vysvetlenie kódu.

Podrobnosti nájdete v kóde, ale približný priebeh procesu je nasledovný.

Pre postskriptum.

  • ①Čítanie textových súborov v cestách odovzdaných ako argumenty.
  • ②Počet znakov až do počtu riadkov odovzdaných v argumente je určený z počtu nových riadkov. Napríklad v prípade riadku 5 sú pred riadkom 5 štyri zlomy riadkov, takže nájdite pozíciu, kde sa nachádza štvrtý zlom riadku
  • ③Získajte informácie až po riadok 4.
  • ④(2) Získajte informácie od riadku 5 rovnakým spôsobom ako v bode (2).
  • ⑤Informácie v bode (3), informácie, ktoré sa majú pripojiť ako argument, a informácie v bode (4) sa skombinujú.
  • ⑥Vytvorte súbor na základe informácií v bode (5) a prepíšte ho.

V prípade vymazania

  • ①Čítanie textových súborov v cestách odovzdaných ako argumenty.
  • ②Počet znakov až do počtu riadkov odovzdaných v argumente je určený z počtu nových riadkov. Napríklad v prípade riadku 5 sú pred riadkom 5 štyri zlomy riadkov, takže nájdite pozíciu, kde sa nachádza štvrtý zlom riadku
  • ③Získajte informácie až po riadok 4.
  • ④(2) Získajte informácie od riadku 6 rovnakým spôsobom ako v bode (2).
  • ⑤Informácie v bodoch iii) a iv) sa kombinujú. (Vytvorenie reťazca bez piateho riadku.)
  • ⑥Vytvorte súbor na základe informácií v bode (5) a prepíšte ho.

V prípade pridávania a odstraňovania ide v oboch prípadoch o to isté, ale namiesto úpravy súboru sa z pôvodného súboru vyberú len potrebné informácie a vytvorí sa nový súbor, ktorý sa uloží nad ním.

3. zhrnutie

Ak máte problémy s úpravou súborov csv/textových súborov pomocou makier VBA (Excel), pozrite si túto časť.

Ďakujeme vám za sledovanie až do konca.