Cómo editar archivos csv y de texto con VBA (macros de Excel).


Fecha de publicación:5 de julio de 2022.



INFOMARTION > Cómo editar archivos csv y de texto con VBA (macros de Excel).

Resumen.

Me gustaría describir cómo editar archivos csv y de texto con VBA (macros de Excel). El artículo está dirigido a personas que quieran programar las siguientes tareas

  • Quiero añadir filas a un archivo csv o de texto ya existente. Quiero añadir texto en medio de una línea.
  • Quiero eliminar líneas en un archivo csv o de texto ya existente.

Índice de contenidos

  1. Método de programación
  2. Descripción del código.
  3. resumen

1. Método de programación

En conclusión, FileSystemObject no tiene la capacidad de añadir en medio de una línea o eliminar una línea específica, por lo que tienes que programarlo tú mismo.

A continuación se ofrecen ejemplos de referencia de programación.

Como está creado en Function, espero que puedas traerlo tal cual copiando y pegando, y que llame a métodos de 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 utilizarlo, pase los argumentos como se indica a continuación.

  • filePath・・・Esta será la ruta completa del archivo. Ejemplo.)C:\Users\user\Desktop\test\test.txt
  • mode・・・Pasar verdadero, falso. En caso de que sea cierto, añade. Si es falso, elimina la fila.
  • targetRow・・・Especifica el número de filas de destino. En el caso de las adiciones, es el número de líneas que hay que añadir, y en el caso de las supresiones, es el número de líneas que hay que eliminar.
  • targetInput・・・En el caso de los postscriptores, especifique el valor que debe añadirse. No se utiliza para el borrado y puede ser un valor arbitrario. También se aceptan letras vacías.
  • lineBreakType・・・Ajuste de los caracteres de nueva línea. Si es verdadero, vbCrLf. vbLf si False. En resumen, True para los archivos creados en Windows.

La codificación de caracteres es UTF-8, pero si quiere cambiarla, modifique el código de la función directamente. Hay dos lugares donde ".Charset = "UTF-8"".

A continuación se muestra un ejemplo de implementación de una llamada a una función real.

Sub test()
 
'Ejemplo de añadir test123 a la línea 5 de test.txt.(Archivos creados en Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", True, 5, "test123", True
 
'Ejemplo de eliminación de la línea 5 de test.txt.(Archivos creados en Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", False, 5, "", True
 
End Sub

Si quiere anexar como un csv, haga que el argumento del valor a anexar sea un valor separado por comas, y se anexará un valor separado por comas. Ejemplo.)"test1,test2,test3"

2. Descripción del código.

Aquí terminan las instrucciones de uso del sistema, seguidas de una explicación del código.

Los detalles se pueden encontrar en el código, pero un flujo de proceso aproximado es el siguiente.

Para la posdata.

  • ①Lectura de archivos de texto en rutas pasadas como argumentos.
  • ②El número de caracteres hasta el número de líneas pasadas en el argumento se especifica a partir del número de nuevas líneas. Por ejemplo, para la línea 5, hay cuatro saltos de línea antes de la línea 5, así que encuentre la posición donde se encuentra el cuarto salto de línea
  • ③Recuperar la información hasta la línea 4.
  • ④(2) Adquirir la información a partir de la línea 5 de la misma manera que (2).
  • ⑤Se combinan la información de (3), la información a añadir pasada como argumento y la información de (4).
  • ⑥Cree un archivo basado en la información de (5) y sobrescriba el archivo.

En caso de supresión

  • ①Lectura de archivos de texto en rutas pasadas como argumentos.
  • ②El número de caracteres hasta el número de líneas pasadas en el argumento se especifica a partir del número de nuevas líneas. Por ejemplo, para la línea 5, hay cuatro saltos de línea antes de la línea 5, así que encuentre la posición donde se encuentra el cuarto salto de línea
  • ③Recuperar la información hasta la línea 4.
  • ④(2) Adquirir la información a partir de la línea 6 de la misma manera que (2).
  • ⑤La información de (iii) y (iv) se combina. (Crea una cadena sin quinta línea.)
  • ⑥Cree un archivo basado en la información de (5) y sobrescriba el archivo.

En el caso de la anexión y el borrado, ambos son iguales, pero en lugar de editar el archivo, se hace como si sólo se extrajera la información necesaria del archivo original y se crea un nuevo archivo y se guarda encima.

3. resumen

Si tiene problemas para editar archivos csv/texto con VBA (macros de Excel), consulte esta sección.

Gracias por mirar hasta el final.