Как да редактирате csv и текстови файлове с VBA (макроси на Excel).
Дата на публикуване:5 юли 2022 г.
INFOMARTION > Как да редактирате csv и текстови файлове с VBA (макроси на Excel).
Преглед.
Бих искал да опиша как да редактирам csv и текстови файлове с VBA (макроси на Excel). Статията е предназначена за хора, които искат да програмират следните задачи
- Искам да добавя редове към вече съществуващ csv или текстов файл. Искам да добавя текст в средата на един ред.
- Искам да изтрия редове във вече съществуващ csv или текстов файл.
Съдържание
1. Метод на програмиране
В заключение, FileSystemObject няма възможност за добавяне в средата на реда или за изтриване на определен ред, така че трябва да го програмирате сами.
По-долу са дадени референтни примери за програмиране.
Тъй като тя е създадена във Function, бих искал да я въведа така, както е, чрез копиране и поставяне, а извикванията на методите да се извършват от 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
За да го използвате, подайте следните аргументи.
- filePath・・・Това ще бъде пълният път до файла. Пример.)C:\Users\user\Desktop\test\test.txt
- mode・・・Предайте true, false. Ако е True, добавете. Ако е false, изтрийте реда.
- targetRow・・・Посочва броя на целевите редове. В случай на добавяне това е броят на редовете, които трябва да бъдат добавени, а в случай на изтриване - броят на редовете, които трябва да бъдат изтрити.
- targetInput・・・За постскриптовете посочете стойността, която да бъде добавена. Тя не се използва за изтриване и може да бъде произволна стойност. Празните букви също са приемливи.
- lineBreakType・・・Задаване на знаци за нов ред. Ако е вярно, vbCrLf. vbLf if False. Накратко, Вярно за файлове, създадени в Windows.
Кодирането на символите е UTF-8, но ако искате да го промените, променете директно кода на функцията. Има две места, където ".Charset = "UTF-8"".
По-долу е показан пример за изпълнение на действителното извикване на функция.
Sub test()
'Пример за добавяне на test123 към ред 5 на test.txt.(Файлове, създадени в Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", True, 5, "test123", True
'Пример за изтриване на ред 5 от test.txt.(Файлове, създадени в Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", False, 5, "", True
End Sub
Ако искате да приложите като csv, направете аргумента на стойността, която трябва да бъде приложена, стойност, разделена на запетаи, и ще бъде приложена стойност, разделена на запетаи. Пример.)"test1,test2,test3"
2. Код Описание.
Това е краят на инструкциите за използване на системата, последвани от обяснение на кода.
Подробностите могат да бъдат намерени в кода, но приблизителният ход на процеса е следният.
За постскриптум.
- ①Четене на текстови файлове по пътища, подадени като аргументи.
- ②Броят на символите до броя на редовете, подадени в аргумента, се определя от броя на новите редове. Например за ред 5 има четири прекъсвания на реда преди ред 5, така че намерете позицията, в която се намира четвъртото прекъсване на реда.
- ③Извличане на информация до ред 4.
- ④(2) Съберете информация от ред 5 нататък по същия начин, както в точка 2.
- ⑤Информацията в (3), информацията, която трябва да се добави, предадена като аргумент, и информацията в (4) се комбинират заедно.
- ⑥Създайте файл въз основа на информацията в (5) и презапишете файла.
В случай на изтриване
- ①Четене на текстови файлове по пътища, подадени като аргументи.
- ②Броят на символите до броя на редовете, подадени в аргумента, се определя от броя на новите редове. Например за ред 5 има четири прекъсвания на реда преди ред 5, така че намерете позицията, в която се намира четвъртото прекъсване на реда.
- ③Извличане на информация до ред 4.
- ④(2) Съберете информация от ред 6 нататък по същия начин, както в точка 2.
- ⑤Информацията в точки iii) и iv) се комбинира заедно. (Създаване на низ без пети ред.)
- ⑥Създайте файл въз основа на информацията в (5) и презапишете файла.
При добавянето и изтриването става въпрос за едно и също действие, но вместо да се редактира файлът, от оригиналния файл се извлича само необходимата информация и се създава нов файл, който се записва наново.
3. резюме
Ако имате проблеми с редактирането на csv/текстови файлове с VBA (макроси на Excel), вижте този раздел.
Благодарим ви, че гледахте до края.
■INFORMATION
Моля, кликнете тук, за да преминете към горната страница на ИНФОРМАЦИЯТА.
■PROFILE
■Данни за контакт.
За запитвания относно статията, моля, свържете се с нас тук.