Hogyan szerkeszthetünk csv és szöveges fájlokat VBA-val (Excel makrók).


Megjelenés dátuma:2022. július 5.



INFOMARTION > Hogyan szerkeszthetünk csv és szöveges fájlokat VBA-val (Excel makrók).

Áttekintés.

Szeretném leírni, hogyan lehet csv és szöveges fájlokat szerkeszteni VBA-val (Excel makrók). A cikk azoknak szól, akik a következő feladatokat szeretnék programozni

  • Sorokat szeretnék hozzáadni egy már meglévő csv- vagy szöveges fájlhoz. Szöveget szeretnék hozzáadni egy sor közepén.
  • Egy már meglévő csv- vagy szöveges fájlból szeretnék sorokat törölni.

Tartalomjegyzék

  1. Programozási módszer
  2. Kód Leírás.
  3. összefoglaló

1. Programozási módszer

Összefoglalva, a FileSystemObject nem képes a sor közepén csatolni vagy törölni egy adott sort, ezért ezt magadnak kell programoznod.

A programozásra vonatkozó referenciapéldák az alábbiakban találhatók.

Mivel a Function-ben jön létre, szeretném, ha másolással és beillesztéssel úgy hoznám be, ahogy van, és a metódushívások a Sub-ból történnének.

'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

Használatához adja meg az argumentumokat a következőképpen.

  • filePath・・・Ez lesz a fájl teljes elérési útvonala. Példa.)C:\Users\user\Desktop\test\test.txt
  • mode・・・Pass true, false. Ha True, add. Ha false, törli a sort.
  • targetRow・・・Megadja a célsorok számát. Hozzáadás esetén a hozzáadandó sorok száma, törlés esetén pedig a törlendő sorok száma.
  • targetInput・・・Utóirat esetén adja meg a csatolandó értéket. Törlésre nem használatos, és tetszőleges érték lehet. Az üres betűk is elfogadhatók.
  • lineBreakType・・・Újsor karakterek beállítása. Ha True, vbCrLf. vbLf if False. Röviden: Igaz a Windowsban létrehozott fájlokra.

A karakterkódolás UTF-8, de ha meg akarja változtatni, közvetlenül a Function kódot módosíthatja. Két helyen van ".Charset = "UTF-8"".

Az alábbiakban egy tényleges függvényhívás példaimplementációja látható.

Sub test()
 
'Példa a test123 csatolására a test.txt 5. sorához.(Windowsban létrehozott fájlok.)
editFile "C:\Users\user\Desktop\test\test.txt", True, 5, "test123", True
 
'Példa a test.txt 5. sorának törlésére.(Windowsban létrehozott fájlok.)
editFile "C:\Users\user\Desktop\test\test.txt", False, 5, "", True
 
End Sub

Ha csv-ként szeretné csatolni, a csatolandó érték argumentumát tegye vesszővel elválasztott értékké, és egy vesszővel elválasztott érték lesz csatolva. Példa.)"test1,test2,test3"

2. Kód Leírás.

Itt ér véget a rendszer használatára vonatkozó utasítás, amelyet a kód magyarázata követ.

A részletek a kódban találhatók, de a durva folyamatmenet a következő.

Utóiratnak.

  • ①Szöveges fájlok olvasása az argumentumként átadott elérési utakban.
  • ②A karakterek száma az argumentumban átadott sorok számáig az újsorok számából adódik. Például az 5. sorban négy sortörés van az 5. sor előtt, tehát keresse meg azt a pozíciót, ahol a negyedik sortörés található.
  • ③Információ lekérdezése a 4. sorig.
  • ④(2) Szerezze be az információkat az 5. sortól kezdve a (2) bekezdéssel megegyező módon.
  • ⑤A (3) információ, az argumentumként átadott, csatolandó információ és a (4) információ kombinálódik.
  • ⑥Hozzon létre egy fájlt az (5) pontban megadott információk alapján, és írja felül a fájlt.

Törlés esetén

  • ①Szöveges fájlok olvasása az argumentumként átadott elérési utakban.
  • ②A karakterek száma az argumentumban átadott sorok számáig az újsorok számából adódik. Például az 5. sorban négy sortörés van az 5. sor előtt, tehát keresse meg azt a pozíciót, ahol a negyedik sortörés található.
  • ③Információ lekérdezése a 4. sorig.
  • ④(2) A 6. sortól kezdődően a (2) bekezdéssel megegyező módon szerezze be az információkat.
  • ⑤A iii. és iv. pontban szereplő információk együttesen szerepelnek. (Hozzon létre egy stringet ötödik sor nélkül.)
  • ⑥Hozzon létre egy fájlt az (5) pontban megadott információk alapján, és írja felül a fájlt.

A csatolás és a törlés esetében mindkettő ugyanaz, de a fájl szerkesztése helyett úgy történik, mintha csak a szükséges információkat vennénk ki az eredeti fájlból, és egy új fájlt hoznánk létre és mentenénk át.

3. összefoglaló

Ha problémái vannak a csv/text fájlok VBA-val (Excel makrók) történő szerkesztésével, kérjük, olvassa el ezt a részt.

Köszönjük, hogy a végéig figyeltek.