Как редактировать 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・・・Установка символов новой строки. Если 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), обратитесь к этому разделу.
Спасибо, что досмотрели до конца.
■INFORMATION
Пожалуйста, нажмите здесь, чтобы перейти на верхнюю страницу ИНФОРМАЦИЯ.
■PROFILE
Пожалуйста, нажмите здесь для получения профиля.
■Контактная информация.
Для получения информации о статье, пожалуйста, свяжитесь с нами здесь.