Como editar csv e ficheiros de texto com VBA (Excel macros).
Data de Publicação:5 de Julho de 2022.
INFOMARTION > Como editar csv e ficheiros de texto com VBA (Excel macros).
Visão geral.
Gostaria de descrever como editar csv e ficheiros de texto com VBA (Excel macros). O artigo é destinado a pessoas que queiram programar as seguintes tarefas
- Quero adicionar linhas a um csv ou ficheiro de texto já existente. Quero acrescentar texto no meio de uma linha.
- Quero apagar linhas de um csv ou ficheiro de texto já existente.
Tabela de Conteúdos
1. Método de programação
Em conclusão, FileSystemObject não tem a capacidade de anexar no meio de uma linha ou apagar uma linha específica, pelo que tem de ser você mesmo a programá-la.
Apresentam-se a seguir exemplos de programação de referência.
Como é criado em Função, espero que possa trazê-lo tal como está, copiando e colando, e que tenha métodos de chamada do 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
Para o utilizar, passar argumentos como se segue.
- filePath・・・Este será o caminho completo do ficheiro. Exemplo.)C:\Users\user\Desktop\test\test.txt
- mode・・・Passe verdadeiro, falso. Se for verdade, acrescente. Se falso, eliminar a fila.
- targetRow・・・Especifica o número de linhas de destino. No caso de adições, é o número de linhas a acrescentar, e no caso de supressões, é o número de linhas a suprimir.
- targetInput・・・Para postscripts, especificar o valor a ser anexado. Não é utilizado para eliminação e pode ser um valor arbitrário. As cartas vazias também são aceitáveis.
- lineBreakType・・・Definição de novos caracteres de linha. Se Verdadeiro, vbCrLf. vbLf se Falso. Em resumo, True para ficheiros criados em Windows.
A codificação de caracteres é UTF-8, mas se o quiser alterar, modifique directamente o código da Função. Há dois lugares onde ".Charset = "UTF-8"".
Um exemplo de implementação de uma chamada de função real é mostrado abaixo.
Sub test()
'Exemplo de anexar o teste123 à linha 5 de test.txt.(Ficheiros criados no Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", True, 5, "test123", True
'Exemplo de eliminação da linha 5 do test.txt.(Ficheiros criados no Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", False, 5, "", True
End Sub
Se quiser anexar como csv, faça o argumento do valor a anexar um valor separado por vírgula, e um valor separado por vírgula será anexado. Exemplo.)"test1,test2,test3"
2. Descrição do código.
Este é o fim das instruções sobre como utilizar o sistema, seguido de uma explicação do código.
Os detalhes podem ser encontrados no código, mas um fluxo de processo aproximado é o seguinte.
Para postscript.
- ①Leitura de ficheiros de texto em caminhos passados como argumentos.
- ②O número de caracteres até ao número de linhas passadas no argumento é especificado a partir do número de novas linhas. Por exemplo, para a linha 5, há quatro quebras de linha antes da linha 5, por isso encontre a posição onde se encontra a quarta quebra de linha
- ③Recuperar informação até à linha 4.
- ④(ii) Adquirir informações a partir da linha 5, da mesma forma que (ii).
- ⑤A informação em (3), a informação a ser anexada passada como argumento e a informação em (4) são combinadas.
- ⑥Criar um ficheiro com base na informação em (5) e sobrescrever o ficheiro.
Em caso de eliminação
- ①Leitura de ficheiros de texto em caminhos passados como argumentos.
- ②O número de caracteres até ao número de linhas passadas no argumento é especificado a partir do número de novas linhas. Por exemplo, para a linha 5, há quatro quebras de linha antes da linha 5, por isso encontre a posição onde se encontra a quarta quebra de linha
- ③Recuperar informação até à linha 4.
- ④(2) Adquirir informações a partir da linha 6, da mesma forma que (2).
- ⑤As informações em (iii) e (iv) são combinadas em conjunto. (Criar um fio sem quinta linha.)
- ⑥Criar um ficheiro com base na informação em (5) e sobrescrever o ficheiro.
No caso de anexar e apagar, ambos são iguais, mas em vez de editar o ficheiro, é feito como se apenas a informação necessária fosse extraída do ficheiro original e um novo ficheiro fosse criado e guardado por cima.
3. resumo
Se tiver problemas na edição de ficheiros csv/texto com VBA (macros Excel), consulte por favor esta secção.
Obrigado por ter observado até ao fim.
■INFORMATION
Por favor clique aqui para ir para a página superior de INFORMAÇÃO.
■PROFILE
Por favor clique aqui para um perfil.
■Detalhes de contacto.