Cara mengedit file csv dan teks dengan VBA (makro Excel).


Tanggal Publikasi:5 Juli 2022.



INFOMARTION > Cara mengedit file csv dan teks dengan VBA (makro Excel).

Ikhtisar.

Saya ingin 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
  2. Deskripsi Kode.
  3. ringkasan

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.

  • ①Membaca file teks di jalur yang dilewatkan sebagai argumen.
  • ②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
  • ③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

  • ①Membaca file teks di jalur yang dilewatkan sebagai argumen.
  • ②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
  • ③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.

Terima kasih telah menonton sampai akhir.