Kuinka muokata csv- ja tekstitiedostoja VBA:lla (Excel-makrot).


Julkaisupäivä:5. heinäkuuta 2022.



INFOMARTION > Kuinka muokata csv- ja tekstitiedostoja VBA:lla (Excel-makrot).

Yleiskatsaus.

Haluaisin kuvata, miten csv- ja tekstitiedostoja muokataan VBA:lla (Excel-makrot). Artikkeli on tarkoitettu henkilöille, jotka haluavat ohjelmoida seuraavat tehtävät

  • Haluan lisätä rivejä jo olemassa olevaan csv- tai tekstitiedostoon. Haluan lisätä tekstiä rivin keskelle.
  • Haluan poistaa rivejä jo olemassa olevasta csv- tai tekstitiedostosta.

Sisällysluettelo

  1. Ohjelmointimenetelmä
  2. Koodi Kuvaus.
  3. yhteenveto

1. Ohjelmointimenetelmä

Yhteenvetona voidaan todeta, että FileSystemObjectilla ei ole kykyä lisätä rivin keskelle tai poistaa tiettyä riviä, joten sinun on ohjelmoitava se itse.

Seuraavassa annetaan esimerkkejä ohjelmoinnista.

Koska se on luotu Function-ohjelmassa, haluaisin, että se tuodaan sellaisenaan kopioimalla ja liittämällä ja että metodikutsut tehdään Sub-ohjelmasta.

'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

Jos haluat käyttää sitä, anna argumentit seuraavasti.

  • filePath・・・Tämä on tiedoston koko polku. Esimerkki.)C:\Users\user\Desktop\test\test.txt
  • mode・・・Pass true, false. Jos True, lisää. Jos false, rivi poistetaan.
  • targetRow・・・Määrittää kohderivien määrän. Kun kyseessä on lisäys, se on lisättävien rivien määrä, ja kun kyseessä on poisto, se on poistettavien rivien määrä.
  • targetInput・・・Määritä jälkikäteen lisättävä arvo. Sitä ei käytetä poistamiseen, ja se voi olla mielivaltainen arvo. Myös tyhjät kirjaimet ovat hyväksyttäviä.
  • lineBreakType・・・Rivinvaihtomerkkien asettaminen. Jos True, vbCrLf. vbLf if False. Lyhyesti sanottuna True Windowsissa luoduille tiedostoille.

Merkkien koodaus on UTF-8, mutta jos haluat muuttaa sitä, muuta Function-koodia suoraan. On kaksi kohtaa, joissa ".Charset = "UTF-8"".

Alla on esimerkki varsinaisen Function-kutsun toteutuksesta.

Sub test()
 
'Esimerkki test123:n liittämisestä test.txt-tiedoston riville 5.(Windowsissa luodut tiedostot.)
editFile "C:\Users\user\Desktop\test\test.txt", True, 5, "test123", True
 
'Esimerkki test.txt-tiedoston rivin 5 poistamisesta.(Windowsissa luodut tiedostot.)
editFile "C:\Users\user\Desktop\test\test.txt", False, 5, "", True
 
End Sub

Jos haluat liittää tiedoston csv-muodossa, tee liitettävän arvon argumentiksi pilkulla erotettu arvo, jolloin liitetään pilkulla erotettu arvo. Esimerkki.)"test1,test2,test3"

2. Koodi Kuvaus.

Järjestelmän käyttöohjeet päättyvät tähän, ja sen jälkeen seuraa koodin selitys.

Yksityiskohdat löytyvät koodista, mutta karkea prosessin kulku on seuraava.

Jälkikirjoitusta varten.

  • ①Tekstitiedostojen lukeminen argumentteina annetuista poluista.
  • ②Merkkien määrä argumentissa annettujen rivien määrään asti määritetään rivinvaihdon määrästä. Esimerkiksi rivillä 5 on neljä rivinvaihtoa ennen riviä 5, joten etsi kohta, jossa neljäs rivinvaihto sijaitsee.
  • ③Hae tiedot riville 4 asti.
  • ④(2) Hanki tiedot riviltä 5 alkaen samalla tavalla kuin kohdassa (2).
  • ⑤Kohdan (3) tiedot, argumenttina annetut liitettävät tiedot ja kohdan (4) tiedot yhdistetään.
  • ⑥Luo tiedosto kohdan (5) tietojen perusteella ja korvaa tiedosto.

Jos kyseessä on poistaminen

  • ①Tekstitiedostojen lukeminen argumentteina annetuista poluista.
  • ②Merkkien määrä argumentissa annettujen rivien määrään asti määritetään rivinvaihdon määrästä. Esimerkiksi rivillä 5 on neljä rivinvaihtoa ennen riviä 5, joten etsi kohta, jossa neljäs rivinvaihto sijaitsee.
  • ③Hae tiedot riville 4 asti.
  • ④(2) Hanki tiedot riviltä 6 alkaen samalla tavalla kuin kohdassa (2).
  • ⑤Kohdissa iii) ja iv) annetut tiedot yhdistetään toisiinsa. (Luo merkkijono, jossa ei ole viidettä riviä.)
  • ⑥Luo tiedosto kohdan (5) tietojen perusteella ja korvaa tiedosto.

Liittämisessä ja poistamisessa on kyse samasta asiasta, mutta tiedoston muokkaamisen sijaan alkuperäisestä tiedostosta poimitaan vain tarvittavat tiedot ja luodaan ja tallennetaan uusi tiedosto.

3. yhteenveto

Jos sinulla on ongelmia csv-/tekstitiedostojen muokkaamisessa VBA:lla (Excel-makroilla), tutustu tähän osioon.

Kiitos, että katsoitte loppuun asti.