Как да редактирате csv и текстови файлове с VBA (макроси на Excel).


Дата на публикуване:5 юли 2022 г.



INFOMARTION > Как да редактирате csv и текстови файлове с VBA (макроси на Excel).

Преглед.

Бих искал да опиша как да редактирам csv и текстови файлове с VBA (макроси на Excel). Статията е предназначена за хора, които искат да програмират следните задачи

  • Искам да добавя редове към вече съществуващ csv или текстов файл. Искам да добавя текст в средата на един ред.
  • Искам да изтрия редове във вече съществуващ csv или текстов файл.

Съдържание

  1. Метод на програмиране
  2. Код Описание.
  3. резюме

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), вижте този раздел.

Благодарим ви, че гледахте до края.