Jak edytować pliki csv i tekstowe za pomocą VBA (makra Excela).


Data publikacji:5 lipca 2022 r.



INFOMARTION > Jak edytować pliki csv i tekstowe za pomocą VBA (makra Excela).

Przegląd.

Chciałbym opisać jak edytować pliki csv i tekstowe za pomocą VBA (makra Excela). Artykuł przeznaczony jest dla osób, które chcą zaprogramować następujące zadania

  • Chcę dodać wiersze do już istniejącego pliku csv lub tekstowego. Chcę dodać tekst w środku linii.
  • Chcę usunąć linie w już istniejącym pliku csv lub tekstowym.

Spis treści

  1. Metoda programowania
  2. Kod Opis.
  3. streszczenie

1. Metoda programowania

Podsumowując, FileSystemObject nie ma możliwości dołączenia w środku linii lub usunięcia konkretnej linii, więc musisz zaprogramować to sam.

Poniżej podano referencyjne przykłady programowania.

Ponieważ jest on tworzony w Function, mam nadzieję, że możesz go wprowadzić tak, jak jest przez kopiowanie i wklejanie, i mieć to wywołanie metod z 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

Aby go użyć, przekaż argumenty w następujący sposób.

  • filePath・・・Będzie to pełna ścieżka dostępu do pliku. Przykład.)C:\Users\user\Desktop\test\test.txt
  • mode・・・Pass true, false. Jeśli True, dodaj. Jeśli false, to usuń wiersz.
  • targetRow・・・Określa liczbę wierszy docelowych. W przypadku dodawania jest to liczba wierszy do dodania, a w przypadku usuwania jest to liczba wierszy do usunięcia.
  • targetInput・・・Dla postscriptów określ wartość, która ma być dołączona. Nie jest używany do usuwania i może być dowolną wartością. Dopuszczalne są również puste litery.
  • lineBreakType・・・Ustawienie znaków nowej linii. If True, vbCrLf. vbLf if False. W skrócie True dla plików utworzonych w systemie Windows.

Kodowanie znaków to UTF-8, ale jeśli chcesz je zmienić, zmodyfikuj bezpośrednio kod Function. Istnieją dwa miejsca, w których ".Charset = "UTF-8"".

Przykładowa implementacja rzeczywistego wywołania funkcji jest przedstawiona poniżej.

Sub test()
 
'Przykład dołączenia test123 do linii 5 pliku test.txt.(Pliki utworzone w systemie Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", True, 5, "test123", True
 
'Przykład usunięcia linii 5 z pliku test.txt.(Pliki utworzone w systemie Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", False, 5, "", True
 
End Sub

Jeśli chcesz dołączyć jako csv, uczyń argument wartości do dołączenia wartością rozdzieloną przecinkami, a wartość rozdzielona przecinkami zostanie dołączona. Przykład.)"test1,test2,test3"

2. Kod Opis.

Na tym kończy się instrukcja obsługi systemu, po czym następuje wyjaśnienie kodu.

Szczegóły można znaleźć w kodzie, ale przybliżony przepływ procesu jest następujący.

Za postscriptum.

  • ①Odczyt plików tekstowych w ścieżkach przekazanych jako argumenty.
  • ②Z liczby znaków do liczby linii przekazanych w argumencie określana jest liczba nowych linii. Na przykład, dla linii 5, są cztery przerwy przed linią 5, więc znajdź pozycję, gdzie znajduje się czwarta przerwa w linii
  • ③Pobierz informacje do linii 4.
  • ④(2) Pozyskać informacje od wiersza 5 w taki sam sposób jak (2).
  • ⑤Informacje z (3), informacje do dołączenia przekazane jako argument oraz informacje z (4) są łączone razem.
  • ⑥Utwórz plik na podstawie informacji z (5) i nadpisz plik.

W przypadku usunięcia

  • ①Odczyt plików tekstowych w ścieżkach przekazanych jako argumenty.
  • ②Z liczby znaków do liczby linii przekazanych w argumencie określana jest liczba nowych linii. Na przykład, dla linii 5, są cztery przerwy przed linią 5, więc znajdź pozycję, gdzie znajduje się czwarta przerwa w linii
  • ③Pobierz informacje do linii 4.
  • ④(2) Pozyskać informacje od wiersza 6 w taki sam sposób jak (2).
  • ⑤Informacje w punktach (iii) i (iv) są połączone razem. (Utwórz ciąg znaków bez piątej linii.)
  • ⑥Utwórz plik na podstawie informacji z (5) i nadpisz plik.

W przypadku dołączania i usuwania, oba są takie same, ale zamiast edytować plik, robi się to tak, jakby z oryginalnego pliku wyciągnięto tylko niezbędne informacje, a nowy plik jest tworzony i zapisywany nad nim.

3. streszczenie

Jeśli masz problemy z edycją plików csv/tekstowych za pomocą VBA (makra Excela), zapoznaj się z tym działem.

Dziękujemy za obejrzenie do końca.