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ä
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.
■INFORMATION
Klikkaa tästä siirtyäksesi TIETOJEN yläsivulle.
■PROFILE
Klikkaa tästä saadaksesi profiilin.
■Yhteystiedot.