Kā rediģēt csv un teksta failus, izmantojot VBA (Excel makrus).


Publikācijas datums:2022. gada 5. jūlijs.



INFOMARTION > Kā rediģēt csv un teksta failus, izmantojot VBA (Excel makrus).

Pārskats.

Vēlos aprakstīt, kā rediģēt csv un teksta failus, izmantojot VBA (Excel makrus). Šis raksts ir paredzēts cilvēkiem, kuri vēlas ieprogrammēt šādus uzdevumus.

  • Es gribu pievienot rindas jau esošam csv vai teksta datnei. Vēlos pievienot tekstu rindas vidū.
  • Vēlos dzēst rindas jau esošā csv vai teksta failā.

Satura rādītājs

  1. Programmēšanas metode
  2. Kods Apraksts.
  3. kopsavilkums

1. Programmēšanas metode

Nobeigumā jāsecina, ka FileSystemObject nespēj pievienot rindas vidū vai izdzēst konkrētu rindu, tāpēc tas ir jāprogrammē pašam.

Tālāk ir sniegti atsauces piemēri par programmēšanu.

Tā kā tas ir izveidots funkcijā Function, es gribētu, lai tas tiktu ievietots, kā tas ir, kopējot un ielīmējot, un lai metodes izsaukumi tiktu veikti no 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

Lai to izmantotu, iesniedziet šādus argumentus.

  • filePath・・・Tas būs pilns faila ceļš. Piemērs.)C:\Users\user\Desktop\test\test.txt
  • mode・・・Pass true, false. Ja ir True, pievienojiet. Ja false, izdzēsiet rindu.
  • targetRow・・・Norāda mērķa rindu skaitu. Pievienošanas gadījumā tas ir pievienojamo rindu skaits, bet dzēšanas gadījumā - dzēšamo rindu skaits.
  • targetInput・・・Postskriptu gadījumā norādiet pievienojamo vērtību. To neizmanto dzēšanai, un tā var būt patvaļīga vērtība. Pieņemami ir arī tukši burti.
  • lineBreakType・・・Jaunās rindiņas rakstzīmju iestatīšana. Ja True, vbCrLf. vbLf if False. Īsāk sakot, True - Windows sistēmā izveidotiem failiem.

Rakstzīmju kodējums ir UTF-8, bet, ja vēlaties to mainīt, modificējiet funkcijas kodu tieši. Ir divas vietas, kur ".Charset = "UTF-8"".

Tālāk ir parādīts faktiskā funkcijas izsaukuma implementācijas piemērs.

Sub test()
 
'Test123 pievienošanas piemērs test.txt 5. rindai.(Failus, kas izveidoti operētājsistēmā Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", True, 5, "test123", True
 
'Test.txt 5. rindas dzēšanas piemērs.(Failus, kas izveidoti operētājsistēmā Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", False, 5, "", True
 
End Sub

Ja vēlaties pievienot kā csv, pievienojamās vērtības argumentu norādiet kā ar komatiem atdalītu vērtību, un tiks pievienota ar komatiem atdalīta vērtība. Piemērs.)"test1,test2,test3"

2. Kods Apraksts.

Tas ir sistēmas lietošanas pamācības beigas, kam seko koda skaidrojums.

Sīkāka informācija ir atrodama kodā, bet aptuvenā procesa plūsma ir šāda.

Postskriptam.

  • ①Teksta failu lasīšana ceļos, kas iesniegti kā argumenti.
  • ②Rakstzīmju skaits līdz argumentā nodoto rindu skaitam tiek noteikts no jauno rindu skaita. Piemēram, 5. rindā pirms 5. rindas ir četri rindu pārrāvumi, tāpēc atrodiet pozīciju, kurā atrodas ceturtais rindu pārrāvums.
  • ③Iegūstiet informāciju līdz 4. rindai.
  • ④(2) Iegūstiet informāciju no 5. rindas un tālāk tādā pašā veidā kā 2. punktā.
  • ⑤Informācija (3), pievienojamā informācija, kas nodota kā arguments, un informācija (4) tiek apvienota kopā.
  • ⑥Izveidojiet datni, pamatojoties uz (5) sniegto informāciju, un pārrakstiet datni.

Dzēšanas gadījumā

  • ①Teksta failu lasīšana ceļos, kas iesniegti kā argumenti.
  • ②Rakstzīmju skaits līdz argumentā nodoto rindu skaitam tiek noteikts no jauno rindu skaita. Piemēram, 5. rindā pirms 5. rindas ir četri rindu pārrāvumi, tāpēc atrodiet pozīciju, kurā atrodas ceturtais rindu pārrāvums.
  • ③Iegūstiet informāciju līdz 4. rindai.
  • ④(2) Iegūstiet informāciju no 6. rindas un tālāk tādā pašā veidā kā 2. punktā.
  • ⑤Informācija iii) un iv) apakšpunktā ir apvienota kopā. (Izveido virkni bez piektās rindas.)
  • ⑥Izveidojiet datni, pamatojoties uz (5) sniegto informāciju, un pārrakstiet datni.

Gan pievienošanas, gan dzēšanas gadījumā abas darbības ir vienādas, taču tā vietā, lai rediģētu failu, no sākotnējā faila tiek izņemta tikai nepieciešamā informācija, un tiek izveidots jauns fails, kas tiek saglabāts no jauna.

3. kopsavilkums

Ja jums rodas problēmas ar csv/teksta failu rediģēšanu, izmantojot VBA (Excel makrus), skatiet šo sadaļu.

Paldies, ka noskatījāties līdz beigām.