Mengedit file CSV dan teks dengan aman di Excel VBA
Tanggal publikasi:
Diperbarui:
Artikel teknis > Mengedit file CSV dan teks dengan aman di Excel VBA
Konteks 2026 dan penggunaan yang aman
Kesimpulan: Perlakukan berkas teks biasa sebagai baris hanya ketika format benar-benar line- berorientasi. Bidang CSV dapat memuat koma, kutipan, dan jeda baris, jadi gunakan parser CSV-aware untuk data umum CSV dan tulis ke file sementara sebelum mengganti yang asli.
Yang akan Anda pelajari
- Bagaimana mode I / O file VBA berbeda untuk masukan, penambahan, dan keluaran.
- Cara pengkodean, gaya newline, penguncian berkas, dan galat pemulihan mempengaruhi penulisan ulang.
- Mengapa pemisahan tali sederhana tidak aman untuk catatan RFC gaya sewenang-wenang.
Untuk siapa ini: Pengguna excel mempertahankan makro yang dikendalikan dengan kecil.
Konteks 2026: makro asli menunjukkan aliran kerja lokal tertentu dan belum diregeneralisasi menjadi perpustakaan CSV lossless. Back up perwakilan berkas, tes dikutip dan nilai multiline, dan tidak menjalankan menulis ulang terhadap satu-satunya salinan produksi.
Catatan keamanan: Contoh perintah dan konfigurasi dalam artikel asli belum dijalankan ulang dalam lingkungan produksi saat ini. Verifikasi versi yang didukung, cadangan, kendali akses, dan langkah rollback dalam lingkungan tes yang terpisah sebelum menerapkannya.
Sumber resmi utama
Ikhtisar
Artikel ini menjelaskan cara mengedit file csv dan teks dengan VBA (makro Excel). Artikel ini ditujukan bagi orang yang ingin memprogram tugas-tugas berikut ini
- Saya ingin menambahkan baris ke file csv atau teks yang sudah ada. Saya ingin menambahkan teks di tengah-tengah baris.
- Saya ingin menghapus baris dalam file csv atau teks yang sudah ada.
Daftar isi
1. Metode pemrograman
Kesimpulannya, FileSystemObject tidak memiliki kemampuan untuk menambahkan di tengah-tengah baris atau menghapus baris tertentu, jadi Anda harus memprogramnya sendiri.
Contoh referensi pemrograman diberikan di bawah ini.
Karena dibuat dalam Fungsi, saya ingin membuatnya dibawa masuk seperti halnya dengan salin dan tempel dan memiliki panggilan metode yang dibuat dari 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
Untuk menggunakannya, berikan argumen sebagai berikut.
- filePath: Ini akan menjadi jalur lengkap file. Contoh.)C:\Users\user\Desktop\test\test.txt
- mode: Lulus benar, salah. Jika Benar, tambahkan. Jika salah, hapus baris.
- targetRow: Menentukan jumlah baris target. Dalam kasus penambahan, ini adalah jumlah baris yang akan ditambahkan, dan dalam kasus penghapusan, ini adalah jumlah baris yang akan dihapus.
- targetInput: Untuk postscripts, tentukan nilai yang akan ditambahkan. Ini tidak digunakan untuk penghapusan dan bisa berupa nilai sembarang. Huruf kosong juga dapat diterima.
- lineBreakType: Pengaturan karakter baris baru. Jika Benar, vbCrLf. vbLf jika False. Singkatnya, Benar untuk file yang dibuat di Windows.
Pengkodean karakter adalah UTF-8, tetapi jika Anda ingin mengubahnya, modifikasi kode Fungsi secara langsung. Ada dua tempat di mana ".Charset = "UTF-8"".
Contoh implementasi dari pemanggilan Fungsi aktual ditunjukkan di bawah ini.
Sub test()
'Contoh menambahkan test123 ke baris 5 dari test.txt.(File yang dibuat di Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", True, 5, "test123", True
'Contoh menghapus baris 5 dari test.txt.(File yang dibuat di Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", False, 5, "", True
End Sub
Jika Anda ingin menambahkan sebagai csv, buat argumen nilai yang akan ditambahkan sebagai nilai yang dipisahkan koma, dan nilai yang dipisahkan koma akan ditambahkan. Contoh.)"test1,test2,test3"
2. Deskripsi Kode.
Ini adalah akhir dari instruksi tentang cara menggunakan sistem, diikuti oleh penjelasan kode.
Detailnya bisa ditemukan dalam kode, tetapi alur proses kasarnya adalah sebagai berikut.
Untuk naskah tambahan.
- 1: Membaca file teks di jalur yang dilewatkan sebagai argumen.
- 2: Jumlah karakter hingga jumlah baris yang dilewatkan dalam argumen ditentukan dari jumlah baris baru. Contohnya, untuk baris 5, ada empat jeda baris sebelum baris 5, jadi temukan posisi di mana jeda baris keempat ditemukan
- 3: Mengambil informasi hingga baris 4.
- ④(2) Dapatkan informasi dari baris 5 dan seterusnya dengan cara yang sama seperti (2).
- ⑤Informasi dalam (3), informasi yang akan ditambahkan yang dilewatkan sebagai argumen dan informasi dalam (4) digabungkan bersama-sama.
- ⑥Buat file berdasarkan informasi dalam (5) dan timpa file tersebut.
Jika terjadi penghapusan
- 1: Membaca file teks di jalur yang dilewatkan sebagai argumen.
- 2: Jumlah karakter hingga jumlah baris yang dilewatkan dalam argumen ditentukan dari jumlah baris baru. Contohnya, untuk baris 5, ada empat jeda baris sebelum baris 5, jadi temukan posisi di mana jeda baris keempat ditemukan
- 3: Mengambil informasi hingga baris 4.
- ④(2) Dapatkan informasi dari baris 6 dan seterusnya dengan cara yang sama seperti (2).
- ⑤Informasi dalam (iii) dan (iv) digabungkan bersama-sama. (Membuat string tanpa baris kelima.)
- ⑥Buat file berdasarkan informasi dalam (5) dan timpa file tersebut.
Dalam hal menambahkan dan menghapus, keduanya sama, tetapi alih-alih mengedit file, dibuat seolah-olah hanya informasi yang diperlukan yang diekstrak dari file asli dan file baru dibuat dan disimpan.
3. ringkasan
Jika Anda mengalami masalah dalam mengedit file csv/teks dengan VBA (makro Excel), silakan merujuk ke bagian ini.
Semoga penjelasan ini membantu.
Artikel teknis
Profil
Kontak