VBA (Excel makroları) ile csv ve metin dosyaları nasıl düzenlenir.


Yayın Tarihi:5 Temmuz 2022.



INFOMARTION > VBA (Excel makroları) ile csv ve metin dosyaları nasıl düzenlenir.

Genel bakış.

VBA (Excel makroları) ile csv ve metin dosyalarının nasıl düzenleneceğini anlatmak istiyorum. Bu makale aşağıdaki görevleri programlamak isteyen kişilere yöneliktir

  • Zaten var olan bir csv veya metin dosyasına satır eklemek istiyorum. Bir satırın ortasına metin eklemek istiyorum.
  • Zaten var olan bir csv veya metin dosyasındaki satırları silmek istiyorum.

İçindekiler

  1. Programlama yöntemi
  2. Kod Açıklaması.
  3. özet

1. Programlama yöntemi

Sonuç olarak, FileSystemObject bir satırın ortasına ekleme veya belirli bir satırı silme yeteneğine sahip değildir, bu nedenle bunu kendiniz programlamanız gerekir.

Referans programlama örnekleri aşağıda verilmiştir.

Function'da oluşturulduğu için kopyala yapıştır ile olduğu gibi getirilmesini ve metot çağrılarının Sub'dan yapılmasını istiyorum.

'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

Kullanmak için argümanları aşağıdaki gibi iletin.

  • filePath・・・Bu, dosyanın tam yolu olacaktır. Örnek.)C:\Users\user\Desktop\test\test.txt
  • mode・・・Doğru, yanlış geç. Doğruysa, ekleyin. Yanlışsa, satırı silin.
  • targetRow・・・Hedef satır sayısını belirtir. Ekleme durumunda eklenecek satır sayısı, silme durumunda ise silinecek satır sayısıdır.
  • targetInput・・・Postscriptler için eklenecek değeri belirtin. Silme işlemi için kullanılmaz ve rastgele bir değer olabilir. Boş harfler de kabul edilebilir.
  • lineBreakType・・・Satırsonu karakterlerinin ayarlanması. True ise, vbCrLf. vbLf eğer False. Kısaca, Windows'ta oluşturulan dosyalar için True.

Karakter kodlaması UTF-8'dir, ancak bunu değiştirmek isterseniz İşlev kodunu doğrudan değiştirin. ".Charset = "UTF-8"" ifadesinin bulunduğu iki yer vardır.

Gerçek bir Fonksiyon çağrısının örnek bir uygulaması aşağıda gösterilmiştir.

Sub test()
 
'test123'ü test.txt dosyasının 5. satırına ekleme örneği.(Windows'da oluşturulan dosyalar.)
editFile "C:\Users\user\Desktop\test\test.txt", True, 5, "test123", True
 
'test.txt dosyasının 5. satırını silme örneği.(Windows'da oluşturulan dosyalar.)
editFile "C:\Users\user\Desktop\test\test.txt", False, 5, "", True
 
End Sub

Bir csv olarak eklemek istiyorsanız, eklenecek değerin bağımsız değişkenini virgülle ayrılmış bir değer yapın ve virgülle ayrılmış bir değer eklenecektir. Örnek.)"test1,test2,test3"

2. Kod Açıklaması.

Bu, sistemin nasıl kullanılacağına ilişkin talimatların sonudur ve ardından kodun bir açıklaması gelir.

Ayrıntılar kodda bulunabilir, ancak kaba bir süreç akışı aşağıdaki gibidir.

Dipnot için.

  • ①Argüman olarak aktarılan yollardaki metin dosyalarını okuma.
  • ②Argümanda aktarılan satır sayısına kadar olan karakter sayısı, yeni satır sayısından belirtilir. Örneğin, 5. satır için, 5. satırdan önce dört satır sonu vardır, bu nedenle dördüncü satır sonunun bulunduğu konumu bulun
  • ③Satır 4'e kadar olan bilgileri alın.
  • ④(ii) 5. satırdan itibaren (ii) ile aynı şekilde bilgi edinin.
  • ⑤(3)'teki bilgiler, argüman olarak aktarılan eklenecek bilgiler ve (4)'teki bilgiler bir araya getirilir.
  • ⑥(5)'teki bilgilere göre bir dosya oluşturun ve dosyanın üzerine yazın.

Silinme durumunda

  • ①Argüman olarak aktarılan yollardaki metin dosyalarını okuma.
  • ②Argümanda aktarılan satır sayısına kadar olan karakter sayısı, yeni satır sayısından belirtilir. Örneğin, 5. satır için, 5. satırdan önce dört satır sonu vardır, bu nedenle dördüncü satır sonunun bulunduğu konumu bulun
  • ③Satır 4'e kadar olan bilgileri alın.
  • ④(ii) 6. satırdan itibaren (ii) ile aynı şekilde bilgi edinin.
  • ⑤(iii) ve (iv)'deki bilgiler bir araya getirilir. (Beşinci satırı olmayan bir dize oluşturun.)
  • ⑥(5)'teki bilgilere göre bir dosya oluşturun ve dosyanın üzerine yazın.

Ekleme ve silme durumunda, her ikisi de aynıdır, ancak dosyayı düzenlemek yerine, orijinal dosyadan yalnızca gerekli bilgiler çıkarılmış gibi yapılır ve yeni bir dosya oluşturulur ve üzerine kaydedilir.

3. özet

Csv/metin dosyalarını VBA (Excel makroları) ile düzenlemede sorun yaşıyorsanız, lütfen bu bölüme bakın.

Sonuna kadar izlediğiniz için teşekkür ederiz.