Jak upravovat csv a textové soubory pomocí VBA (makra aplikace Excel).


Datum vydání:5. července 2022.



INFOMARTION > Jak upravovat csv a textové soubory pomocí VBA (makra aplikace Excel).

Přehled.

Rád bych popsal, jak upravovat csv a textové soubory pomocí VBA (makra Excelu). Článek je určen lidem, kteří chtějí naprogramovat následující úkoly.

  • Chci přidat řádky do již existujícího souboru csv nebo textového souboru. Chci přidat text doprostřed řádku.
  • Chci odstranit řádky v již existujícím souboru csv nebo textovém souboru.

Obsah

  1. Metoda programování
  2. Popis kódu.
  3. shrnutí

1. Metoda programování

Závěrem lze říci, že FileSystemObject nemá možnost připojit uprostřed řádku nebo odstranit konkrétní řádek, takže si to musíte naprogramovat sami.

Níže jsou uvedeny referenční příklady programování.

Jelikož je vytvořen ve Function, doufám, že jej můžete přenést tak, jak je, pomocí copy and paste a nechat jej volat metody ze 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

Chcete-li ji použít, předejte argumenty následujícím způsobem.

  • filePath・・・Bude to úplná cesta k souboru. Příklad.)C:\Users\user\Desktop\test\test.txt
  • mode・・・Předat true, false. Pokud je to pravda, přidejte. Pokud je false, řádek se odstraní.
  • targetRow・・・Určuje počet cílových řádků. V případě přidání je to počet řádků, které mají být přidány, a v případě odstranění je to počet řádků, které mají být odstraněny.
  • targetInput・・・U postscriptů zadejte hodnotu, která se má připojit. Nepoužívá se pro mazání a může mít libovolnou hodnotu. Přípustná jsou i prázdná písmena.
  • lineBreakType・・・Nastavení znaků nového řádku. Pokud je to pravda, vbCrLf. vbLf if False. Stručně řečeno, True pro soubory vytvořené v systému Windows.

Kódování znaků je UTF-8, ale pokud jej chcete změnit, upravte přímo kód funkce. Existují dvě místa, kde ".Charset = "UTF-8"".

Příklad implementace skutečného volání funkce je uveden níže.

Sub test()
 
'Příklad přidání test123 na řádek 5 souboru test.txt.(Soubory vytvořené v systému Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", True, 5, "test123", True
 
'Příklad odstranění řádku 5 souboru test.txt.(Soubory vytvořené v systému Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", False, 5, "", True
 
End Sub

Pokud chcete připojit jako csv, zadejte jako argument hodnoty, která má být připojena, hodnotu oddělenou čárkou a bude připojena hodnota oddělená čárkou. Příklad.)"test1,test2,test3"

2. Popis kódu.

Tímto končí návod k použití systému a následuje vysvětlení kódu.

Podrobnosti naleznete v kódu, ale přibližný průběh procesu je následující.

Pro postskriptum.

  • ①Čtení textových souborů v cestách předaných jako argumenty.
  • ②Počet znaků až do počtu řádků předaných v argumentu je určen z počtu nových řádků. Například v případě řádku 5 jsou před řádkem 5 čtyři zlomy řádku, takže najděte pozici, kde se nachází čtvrtý zlom řádku.
  • ③Získejte informace až do řádku 4.
  • ④(2) Získejte informace od řádku 5 stejným způsobem jako v bodě (2).
  • ⑤Informace uvedené v bodě (3), informace, které mají být připojeny jako argument, a informace uvedené v bodě (4) se spojí dohromady.
  • ⑥Vytvořte soubor na základě informací v bodě (5) a přepište jej.

V případě vymazání

  • ①Čtení textových souborů v cestách předaných jako argumenty.
  • ②Počet znaků až do počtu řádků předaných v argumentu je určen z počtu nových řádků. Například v případě řádku 5 jsou před řádkem 5 čtyři zlomy řádku, takže najděte pozici, kde se nachází čtvrtý zlom řádku.
  • ③Získejte informace až do řádku 4.
  • ④(2) Získejte informace od řádku 6 stejným způsobem jako v bodě (2).
  • ⑤Informace v bodech iii) a iv) se kombinují dohromady. (Vytvoření řetězce bez pátého řádku.)
  • ⑥Vytvořte soubor na základě informací v bodě (5) a přepište jej.

V případě připojování a mazání jde v obou případech o totéž, ale namísto úpravy souboru se provede pouze vyjmutí potřebných informací z původního souboru a vytvoření a uložení nového souboru.

3. shrnutí

Pokud máte problémy s úpravou csv/textových souborů pomocí VBA (makra aplikace Excel), přečtěte si tuto část.

Děkujeme, že jste se dívali až do konce.




■INFORMATION

Kliknutím sem přejdete na horní stránku s informacemi.


■PROFILE

Kliknutím sem získáte profil.


■Kontaktní údaje.

V případě dotazů k článku nás prosím kontaktujte zde.