Comment modifier des fichiers csv et texte avec VBA (macros Excel).


Date de publication:5 juillet 2022.



INFOMARTION > Comment modifier des fichiers csv et texte avec VBA (macros Excel).

Vue d'ensemble.

Je voudrais décrire comment éditer des fichiers csv et texte avec VBA (macros Excel). Cet article est destiné aux personnes qui souhaitent programmer les tâches suivantes

  • Je veux ajouter des lignes à un fichier csv ou texte déjà existant. Je veux ajouter du texte au milieu d'une ligne.
  • Je veux supprimer des lignes dans un fichier csv ou texte déjà existant.

Table des matières

  1. Méthode de programmation
  2. Description du code.
  3. résumé

1. Méthode de programmation

En conclusion, FileSystemObject n'a pas la capacité d'ajouter au milieu d'une ligne ou de supprimer une ligne spécifique, vous devez donc le programmer vous-même.

Des exemples de référence de la programmation sont donnés ci-dessous.

Comme elle est créée dans Function, j'espère que vous pouvez l'introduire telle quelle par copier-coller, et appeler la méthode depuis 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

Pour l'utiliser, passez les arguments comme suit.

  • filePath・・・Il s'agira du chemin complet du fichier. Exemple.)C:\Users\user\Desktop\test\test.txt
  • mode・・・Passez vrai, faux. Si c'est vrai, ajoutez. Si elle est fausse, la ligne est supprimée.
  • targetRow・・・Spécifie le nombre de lignes cibles. Dans le cas des ajouts, il s'agit du nombre de lignes à ajouter, et dans le cas des suppressions, il s'agit du nombre de lignes à supprimer.
  • targetInput・・・Pour les postscripts, indiquez la valeur à ajouter. Il n'est pas utilisé pour la suppression et peut être une valeur arbitraire. Les lettres vides sont également acceptables.
  • lineBreakType・・・Définition des caractères de nouvelle ligne. Si c'est vrai, vbCrLf. vbLf si Faux. En bref, True pour les fichiers créés dans Windows.

Le codage des caractères est UTF-8, mais si vous voulez le changer, modifiez directement le code de la fonction. Il y a deux endroits où ".Charset = "UTF-8"".

Un exemple de mise en œuvre d'un appel de fonction réel est présenté ci-dessous.

Sub test()
 
'Exemple d'ajout de test123 à la ligne 5 de test.txt.(Fichiers créés dans Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", True, 5, "test123", True
 
'Exemple de suppression de la ligne 5 de test.txt.(Fichiers créés dans Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", False, 5, "", True
 
End Sub

Si vous voulez ajouter un fichier csv, faites de l'argument de la valeur à ajouter une valeur séparée par des virgules, et une valeur séparée par des virgules sera ajoutée. Exemple.)"test1,test2,test3"

2. Description du code.

C'est la fin des instructions sur la façon d'utiliser le système, suivie d'une explication du code.

Les détails peuvent être trouvés dans le code, mais un flux de processus approximatif est le suivant.

Pour le post-scriptum.

  • ①Lecture des fichiers texte dans les chemins passés en arguments.
  • ②Le nombre de caractères jusqu'au nombre de lignes passées en argument est spécifié à partir du nombre de nouvelles lignes. Par exemple, pour la ligne 5, il y a quatre sauts de ligne avant la ligne 5, donc trouvez la position où se trouve le quatrième saut de ligne
  • ③Récupérer les informations jusqu'à la ligne 4.
  • ④(2) Acquérir les informations à partir de la ligne 5 de la même manière qu'en (2).
  • ⑤Les informations de (3), les informations à ajouter passées en argument et les informations de (4) sont combinées ensemble.
  • ⑥Créez un fichier basé sur les informations de (5) et écrasez le fichier.

En cas de suppression

  • ①Lecture des fichiers texte dans les chemins passés en arguments.
  • ②Le nombre de caractères jusqu'au nombre de lignes passées en argument est spécifié à partir du nombre de nouvelles lignes. Par exemple, pour la ligne 5, il y a quatre sauts de ligne avant la ligne 5, donc trouvez la position où se trouve le quatrième saut de ligne
  • ③Récupérer les informations jusqu'à la ligne 4.
  • ④(2) Acquérir les informations à partir de la ligne 6 de la même manière qu'en (2).
  • ⑤Les informations des points (iii) et (iv) sont combinées ensemble. (Créez une chaîne sans cinquième ligne.)
  • ⑥Créez un fichier basé sur les informations de (5) et écrasez le fichier.

Dans le cas de l'ajout et de la suppression, il s'agit de la même chose, mais au lieu de modifier le fichier, on fait comme si seules les informations nécessaires étaient extraites du fichier d'origine et qu'un nouveau fichier était créé et enregistré par-dessus.

3. résumé

Si vous rencontrez des problèmes pour modifier des fichiers csv/texte avec VBA (macros Excel), veuillez vous reporter à cette section.

Merci d'avoir regardé jusqu'à la fin.