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
  2. Descrição do código.
  3. resumo

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.