Cum să editați fișiere csv și text cu VBA (macro-uri Excel).


Data publicării:5 iulie 2022.



INFOMARTION > Cum să editați fișiere csv și text cu VBA (macro-uri Excel).

Prezentare generală.

Aș dori să descriu modul de editare a fișierelor csv și text cu VBA (macro-uri Excel). Articolul este destinat persoanelor care doresc să programeze următoarele sarcini

  • Doresc să adaug rânduri la un fișier csv sau text deja existent. Vreau să adaug text în mijlocul unei linii.
  • Doresc să șterg liniile dintr-un fișier csv sau text deja existent.

Cuprins

  1. Metoda de programare
  2. Cod Descriere.
  3. rezumat

1. Metoda de programare

În concluzie, FileSystemObject nu are capacitatea de a adăuga în mijlocul unei linii sau de a șterge o anumită linie, așa că trebuie să o programați singur.

Exemple de programare de referință sunt prezentate mai jos.

Având în vedere că este creat în Function, sper că îl puteți aduce așa cum este, prin copiere și lipire, și să apelați metodele din 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

Pentru a-l utiliza, treceți argumente după cum urmează.

  • filePath・・・Aceasta va fi calea completă a fișierului. Exemplu.)C:\Users\user\Desktop\test\test.txt
  • mode・・・Treceți true, false. Dacă este adevărat, se adaugă. Dacă este fals, se șterge rândul.
  • targetRow・・・Specifică numărul de rânduri țintă. În cazul adăugărilor, este numărul de linii care urmează să fie adăugate, iar în cazul eliminărilor, este numărul de linii care urmează să fie eliminate.
  • targetInput・・・Pentru post-scriptumuri, specificați valoarea care urmează să fie adăugată. Aceasta nu este utilizată pentru ștergere și poate fi o valoare arbitrară. Se acceptă și literele goale.
  • lineBreakType・・・Setarea caracterelor de linie nouă. Dacă este adevărat, vbCrLf. vbLf if False. Pe scurt, Adevărat pentru fișierele create în Windows.

Codificarea caracterelor este UTF-8, dar dacă doriți să o schimbați, modificați direct codul funcției. Există două locuri în care ".Charset = "UTF-8"".

Mai jos este prezentat un exemplu de implementare a unui apel de funcție real.

Sub test()
 
'Exemplu de adăugare a test123 la linia 5 din test.txt.(Fișiere create în Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", True, 5, "test123", True
 
'Exemplu de ștergere a liniei 5 din test.txt.(Fișiere create în Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", False, 5, "", True
 
End Sub

Dacă doriți să adăugați ca fișier csv, faceți ca argumentul valorii care urmează să fie adăugată să fie o valoare separată prin virgulă, iar valoarea separată prin virgulă va fi adăugată. Exemplu.)"test1,test2,test3"

2. Cod Descriere.

Aici se încheie instrucțiunile de utilizare a sistemului, urmate de o explicație a codului.

Detaliile pot fi găsite în cod, dar un flux de proces aproximativ este următorul.

Pentru post-scriptum.

  • ①Citirea fișierelor text în căile de acces transmise ca argumente.
  • ②Numărul de caractere până la numărul de linii trecut în argument este specificat din numărul de linii noi. De exemplu, pentru linia 5, există patru întreruperi de linie înainte de linia 5, deci găsiți poziția în care se găsește cea de-a patra întrerupere de linie
  • ③Preluarea informațiilor până la linia 4.
  • ④(ii) Obțineți informații de la linia 5 încolo în același mod ca la punctul (ii).
  • ⑤Informațiile din (3), informațiile care urmează să fie adăugate ca argument și informațiile din (4) sunt combinate împreună.
  • ⑥Creați un fișier pe baza informațiilor de la punctul (5) și suprascrieți fișierul.

În caz de ștergere

  • ①Citirea fișierelor text în căile de acces transmise ca argumente.
  • ②Numărul de caractere până la numărul de linii trecut în argument este specificat din numărul de linii noi. De exemplu, pentru linia 5, există patru întreruperi de linie înainte de linia 5, deci găsiți poziția în care se găsește cea de-a patra întrerupere de linie
  • ③Preluarea informațiilor până la linia 4.
  • ④(2) Obțineți informații de la linia 6 încolo în același mod ca la punctul 2.
  • ⑤Informațiile de la punctele (iii) și (iv) se combină împreună. (Creați un șir fără a cincea linie.)
  • ⑥Creați un fișier pe baza informațiilor de la punctul (5) și suprascrieți fișierul.

În cazul adăugării și al ștergerii, ambele operații sunt identice, dar, în loc să se editeze fișierul, se face ca și cum doar informațiile necesare sunt extrase din fișierul original și se creează și salvează un nou fișier.

3. rezumat

Dacă aveți probleme cu editarea fișierelor csv/text cu VBA (macro Excel), vă rugăm să consultați această secțiune.

Vă mulțumim că ne-ați urmărit până la sfârșit.