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
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.
■INFORMATION
Haga clic aquí para ir a la página superior de INFORMACIÓN.
■PROFILE
Haga clic aquí para ver su perfil.
■Datos de contacto.
Para consultas sobre el artículo, póngase en contacto con nosotros aquí.