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
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.
■INFORMATION
BİLGİ üst sayfasına gitmek için lütfen buraya tıklayınız.
■PROFILE
Profil için lütfen buraya tıklayınız.
■İletişim bilgileri.
Makaleyle ilgili sorularınız için lütfen bizimle buradan iletişime geçin.