Come modificare file csv e di testo con VBA (macro di Excel).


Data di pubblicazione:5 luglio 2022.



INFOMARTION > Come modificare file csv e di testo con VBA (macro di Excel).

Panoramica.

Vorrei descrivere come modificare file csv e di testo con VBA (macro di Excel). L'articolo si rivolge a coloro che desiderano programmare i seguenti compiti

  • Voglio aggiungere righe a un file csv o di testo già esistente. Voglio aggiungere del testo al centro di una riga.
  • Voglio eliminare le righe di un file csv o di testo già esistente.

Indice dei contenuti

  1. Metodo di programmazione
  2. Codice Descrizione.
  3. sintesi

1. Metodo di programmazione

In conclusione, FileSystemObject non ha la capacità di aggiungere nel mezzo di una riga o di cancellare una riga specifica, quindi è necessario programmarlo da soli.

Di seguito sono riportati esempi di programmazione di riferimento.

Poiché è stato creato in Function, spero che sia possibile inserirlo così com'è, facendo copia e incolla, e fargli chiamare i metodi da 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

Per utilizzarlo, passare gli argomenti come segue.

  • filePath・・・Questo sarà il percorso completo del file. Esempio.)C:\Users\user\Desktop\test\test.txt
  • mode・・・Passare vero, falso. Se è vero, aggiungere. Se falso, elimina la riga.
  • targetRow・・・Specifica il numero di righe di destinazione. Nel caso di aggiunte, è il numero di righe da aggiungere e nel caso di cancellazioni, è il numero di righe da cancellare.
  • targetInput・・・Per i post scriptum, specificare il valore da aggiungere. Non viene utilizzato per la cancellazione e può essere un valore arbitrario. Sono accettabili anche le lettere vuote.
  • lineBreakType・・・Impostazione dei caratteri di newline. Se è vero, vbCrLf. vbLf se False. Una spiegazione approssimativa è Vero per i file creati in Windows.

La codifica dei caratteri è UTF-8, ma se si desidera cambiarla, modificare direttamente il codice della funzione. Ci sono due punti in cui ".Charset = "UTF-8"".

Di seguito è riportato un esempio di implementazione di una chiamata di funzione.

Sub test()
 
'Esempio di aggiunta di test123 alla riga 5 di test.txt.(File creati in Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", True, 5, "test123", True
 
'Esempio di cancellazione della riga 5 di test.txt.(File creati in Windows.)
editFile "C:\Users\user\Desktop\test\test.txt", False, 5, "", True
 
End Sub

Se si desidera aggiungere come csv, l'argomento del valore da aggiungere deve essere un valore separato da virgole e verrà aggiunto un valore separato da virgole. Esempio.)"test1,test2,test3"

2. Codice Descrizione.

Qui finiscono le istruzioni per l'uso del sistema, seguite da una spiegazione del codice.

I dettagli si trovano nel codice, ma un flusso di processo approssimativo è il seguente.

Per il poscritto.

  • ①Lettura dei file di testo nei percorsi passati come argomenti.
  • ②Il numero di caratteri fino al numero di righe passate nell'argomento è specificato dal numero di newline. Ad esempio, per la riga 5, ci sono quattro interruzioni di riga prima della riga 5, quindi trovare la posizione in cui si trova la quarta interruzione di riga
  • ③Recuperare le informazioni fino alla riga 4.
  • ④(2) Acquisire le informazioni dalla riga 5 in poi con le stesse modalità del punto (2).
  • ⑤Le informazioni in (3), le informazioni da aggiungere passate come argomento e le informazioni in (4) vengono combinate insieme.
  • ⑥Creare un file basato sulle informazioni di (5) e sovrascrivere il file.

In caso di cancellazione

  • ①Lettura dei file di testo nei percorsi passati come argomenti.
  • ②Il numero di caratteri fino al numero di righe passate nell'argomento è specificato dal numero di newline. Ad esempio, per la riga 5, ci sono quattro interruzioni di riga prima della riga 5, quindi trovare la posizione in cui si trova la quarta interruzione di riga
  • ③Recuperare le informazioni fino alla riga 4.
  • ④(2) Acquisire le informazioni dalla riga 6 in poi con le stesse modalità del punto (2).
  • ⑤Le informazioni di cui ai punti (iii) e (iv) sono combinate insieme. (Crea una stringa senza la quinta riga.)
  • ⑥Creare un file basato sulle informazioni di (5) e sovrascrivere il file.

Nel caso dell'aggiunta e dell'eliminazione, le due operazioni sono identiche, ma anziché modificare il file, si fa in modo che solo le informazioni necessarie vengano estratte dal file originale e che venga creato e salvato un nuovo file.

3. sintesi

Se avete problemi a modificare file csv/testo con VBA (macro di Excel), consultate questa sezione.

Grazie per aver guardato fino alla fine.




■INFORMATION

Fare clic qui per accedere alla pagina superiore di INFORMAZIONI.


■PROFILE

Cliccare qui per un profilo.


■Dettagli di contatto.

Per richieste di informazioni sull'articolo, contattateci qui.