Exporter vers un file .txt délimité par des canaux sans guillemets

J'ai créé un code VBA qui exporte des données vers le file export.txt à partir d'une seule feuille de calcul codée en continu. Je devais utiliser deux loops For car je ne savais pas de quelle manière différente (et facile) je sautais les deux lignes consistant en des informations inutiles du sharepoint vue de l'export (type de file et key primaire pour une autre macro). Néanless, la macro fait son travail …

Sub VBA_Write_to_a_text_file() Dim filename As Ssortingng Dim rng As Range Dim cellValue As Variant Dim i As Integer Dim j As Integer filename = Application.ThisWorkbook.Path & "/export.txt" Open filename For Output As #1 Set rng = Sheets(22).Range("A1:G1") For i = 1 To rng.Rows.Count For j = 1 To rng.Columns.Count cellValue = rng.Cells(i, j).Value If j = rng.Columns.Count Then Write #1, cellValue Else Write #1, cellValue, End If Next j Next i Set rng = Sheets(22).Range("A4:G18") For i = 1 To rng.Rows.Count For j = 1 To rng.Columns.Count cellValue = rng.Cells(i, j).Value If j = rng.Columns.Count Then Write #1, cellValue Else Write #1, cellValue, End If Next j Next i Close #1 End Sub 

… à l'exception de deux problèmes:

  1. Problème du délimiteur de tuyau: je ne peux pas changer de virgule "," délimiteur pour pipe "|" avec la modification de la syntaxe ci-dessous. Cette syntaxe est probablement réservée uniquement aux files séparés par des virgules. Que reorderais-tu?

     If j = rng.Columns.Count Then Write #1, cellValue Else Write #1, cellValue, 
  2. Des citations inutiles: dans le même bit ci-dessus, j'utilise Write au lieu de Print. Je sais que Print se débarrasser des citations, mais il supprimera également les délimiteurs produisant un file délimité par des tabulations qui n'est pas une option. Et la question des tuyaux est plus prioritaire que les citations, mais idéalement je vise à réparer les deux.

Merci d'avance pour toutes vos suggestions.

données sources exemplaires:
exemples de données source

    Tout à fait d'accord avec la suggestion de Dave d'utiliser FileSystemObject – il est disponible dans la bibliothèque Microsoft Scripting Runtime que vous devez append à votre projet. L'autre suggestion que j'ai consiste à itérer les lignes de vos données et à créer un tableau pour chaque ligne. Vous pouvez ensuite utiliser la fonction Join pour convertir ce tableau en une string avec chaque valeur délimitée avec votre choix de délimiteur, par exemple | .

    Turing une rangée d'une Range dans un tableau 1 dimensionnel a besoin d'un petit tour avec la fonction Transpose . Cela vous empêche de toujours vérifier le dernier champ et de ne pas afficher un délimiteur sur cette itération. Cela vous permet également d'utiliser une boucle nestede.

    Voici le code:

     Option Explicit Sub Export() 'for file system Dim objFs As New FileSystemObject Dim tsOut As TextStream 'for data Dim rngHeaders As Range Dim rngData As Range Dim rngRow As Range Dim varRowData As Variant Dim strRowData As Ssortingng Dim strDelimiter As Ssortingng 'counters Dim lngCounter As Long 'set up data Set rngHeaders = Sheet2.Range("A1:F1") Set rngData = Sheet2.Range("A3:F10") 'set delimiter strDelimiter = "|" 'set up file system Set tsOut = objFs.CreateTextFile("c:\temp\out.txt", True) 'output header varRowData = WorksheetFunction.Transpose(WorksheetFunction.Transpose(rngHeaders.Value)) strRowData = VBA.Join(varRowData, strDelimiter) tsOut.WriteLine strRowData 'output data For lngCounter = 1 To rngData.Rows.Count Set rngRow = rngData.Rows(lngCounter) varRowData = WorksheetFunction.Transpose(WorksheetFunction.Transpose(rngRow.Value)) strRowData = VBA.Join(varRowData, strDelimiter) tsOut.WriteLine strRowData Next lngCounter 'clean up tsOut.Close Set tsOut = Nothing Set objFs = Nothing End Sub 

    Utilisez un FileSystemObject pour créer votre file text et écrivez ce que vous souhaitez:

     Dim oFso : Set oFso = CreateObject("Scripting.FileSystemObject") Dim oFile : Set oFile = oFso.CreateTextFile("C:\temp\myfile.txt") 

    Ensuite, vous pouvez écrire ce que vous voulez avec les commands suivantes:

     oFile.WriteLine "This will write a line and end it with a vbNewLine" oFile.Write "Where this write method will " oFile.Write "just write to the file without the new line on the end of the text." oFile.WriteLine "You|can|send|pipe|delimited|text|or|whatever|else|you|like" oFile.Close 'close and save the updated text file 

    Vous pouvez contrôler si vous envoyez des devis en doublant selon les besoins, par exemple:

     oFile.WriteLine """This is quoted text""" 

    Imprime "Ceci est un text cité" dans votre file.