Как редактировать 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・・・Установка символов новой строки. Если True, то vbCrLf. vbLf если False. Вкратце, True для файлов, созданных в Windows.

Кодировка символов - UTF-8, но если вы хотите изменить ее, измените непосредственно код Function. Есть два места, где ".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), обратитесь к этому разделу.

Спасибо, что досмотрели до конца.