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
Ö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.