web-dev-qa-db-fra.com

Enregistrement d'un fichier Excel au format .txt sans guillemets

J'ai une feuille Excel qui contient des données dans la colonne A.Il y a beaucoup de caractères spéciaux dans les cellules. Lorsque je sauvegarde la feuille au format .txt, des guillemets sont placés au début de chaque ligne. J'ai essayé les deux manuellement et par macro en enregistrant le fichier au format .txt.Pourquoi est-ce vrai? Comment les supprimer? Je ne suis pas en mesure de supprimer les citations. Fixation d'une photo enter image description here

15
ankit agrawal

Essayez ce code. Cela fait ce que tu veux.

LOGIQUE

  1. Enregistrer le fichier en tant que fichier délimité par des tabulations dans le répertoire temporaire de l'utilisateur
  2. Lire le fichier texte en 1 go
  3. Remplacez "" par des blancs et écrivez dans le nouveau fichier en même temps.

CODE (ESSAYÉ ET TESTÉ)

Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" _
(ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long

Private Const MAX_PATH As Long = 260

'~~> Change this where and how you want to save the file
Const FlName = "C:\Users\Siddharth Rout\Desktop\MyWorkbook.txt"

Sub Sample()
    Dim tmpFile As String
    Dim MyData As String, strData() As String
    Dim entireline As String
    Dim filesize As Integer

    '~~> Create a Temp File
    tmpFile = TempPath & Format(Now, "ddmmyyyyhhmmss") & ".txt"

    ActiveWorkbook.SaveAs Filename:=tmpFile _
    , FileFormat:=xlText, CreateBackup:=False

    '~~> Read the entire file in 1 Go!
    Open tmpFile For Binary As #1
    MyData = Space$(LOF(1))
    Get #1, , MyData
    Close #1
    strData() = Split(MyData, vbCrLf)

    '~~> Get a free file handle
    filesize = FreeFile()

    '~~> Open your file
    Open FlName For Output As #filesize

    For i = LBound(strData) To UBound(strData)
        entireline = Replace(strData(i), """", "")
        '~~> Export Text
        Print #filesize, entireline
    Next i

    Close #filesize

    MsgBox "Done"
End Sub

Function TempPath() As String
    TempPath = String$(MAX_PATH, Chr$(0))
    GetTempPath MAX_PATH, TempPath
    TempPath = Replace(TempPath, Chr$(0), "")
End Function

INSTANTANÉS

Cahier de travail réel

enter image description here

Après la sauvegarde

enter image description here

9
Siddharth Rout

Je vois que cette question a déjà reçu une réponse, mais je voulais offrir une alternative au cas où quelqu'un d'autre le trouverait plus tard.

En fonction du délimiteur requis, il est possible de le faire sans écrire de code . La question initiale ne donne pas de détails sur le type de sortie souhaité, mais voici une alternative:

Type de fichier PRN

L'option la plus simple consiste à enregistrer le fichier sous le type "Texte mis en forme (espace délimité)" . La ligne de code VBA ressemblerait à ceci:

ActiveWorkbook.SaveAs FileName:=myFileName, FileFormat:=xlTextPrinter, CreateBackup:=False

Dans Excel 2007, une extension de fichier .prn sera insérée à la fin du nom de fichier, mais elle peut être remplacée par .txt en renommant manuellement.

Dans Excel 2010, vous pouvez spécifier toute extension de fichier souhaitée dans la boîte de dialogue Enregistrer sous.

Une chose importante à noter: le nombre de délimiteurs utilisés dans le fichier texte est lié à la largeur de la colonne Excel.

Observer:

Excel Screenshot

Devient:

Text Screenshot

16
nicholas

Ummm, pourquoi pas ça?.

Copiez vos cellules.
Ouvrez le Bloc-notes.
Coller.

Ne regardez pas les guillemets, les guillemets, et conserve les caractères spéciaux, comme demandé par le PO. Il est également délimité par un retour chariot, comme dans l’illustration ci-jointe que le PO n’a pas mentionnée comme une mauvaise chose (ou une bonne chose).

Pas vraiment sûr pourquoi une réponse simple, qui donne les résultats souhaités, me donne une note négative. 

5
Eric Gross

Je viens de passer la majeure partie de l'après-midi sur ce

Il existe deux façons courantes d'écrire dans un fichier, la première étant une instruction "écriture" d'accès direct au fichier. Cela ajoute les citations.

Le second est "ActiveWorkbook.SaveAs" ou "ActiveWorksheet.SaveAs", qui ont tous deux le très mauvais effet secondaire de changer le nom du fichier du classeur actif.

La solution ici est un hybride de quelques solutions trouvées en ligne. Il effectue essentiellement ceci: 1) Copiez les cellules sélectionnées dans une nouvelle feuille de calcul 2) Parcourez chaque cellule une à la fois et "imprimez-le" dans le fichier ouvert 3) Supprimez la feuille de calcul temporaire.

La fonction fonctionne sur les cellules sélectionnées et prend une chaîne pour un nom de fichier ou une invite pour un nom de fichier.

Function SaveFile(myFolder As String) As String
tempSheetName = "fileWrite_temp"
SaveFile = "False"

Dim FilePath As String
Dim CellData As String
Dim LastCol As Long
Dim LastRow As Long

Set myRange = Selection
'myRange.Select
Selection.Copy

'Ask user for folder to save text file to.
If myFolder = "Prompt" Then
    myFolder = Application.GetSaveAsFilename(fileFilter:="XML Files (*.xml), *.xml, All Files (*), *")
End If
If myFolder = "False" Then
    End
End If

Open myFolder For Output As #2

'This temporarily adds a sheet named "Test."
Sheets.Add.Name = tempSheetName
Sheets(tempSheetName).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

LastCol = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
LastRow = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

For i = 1 To LastRow
    For j = 1 To LastCol
        CellData = CellData + Trim(ActiveCell(i, j).Value) + "   "
    Next j

    Print #2, CellData; " "
    CellData = ""

Next i

Close #2

'Remove temporary sheet.
Application.ScreenUpdating = False
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
'Indicate save action.
MsgBox "Text File Saved to: " & vbNewLine & myFolder
SaveFile = myFolder

Fonction de fin

2
asdf30

J'ai le même problème: je dois créer un fichier .txt spécifique pour les paiements bancaires à partir d'un fichier Excel. Le fichier .txt ne doit être supprimé d'aucun caractère, car la norme requiert un certain nombre de virgules après chaque champ obligatoire ..__ La méthode la plus simple consiste à copier le contenu du fichier Excel et à le coller dans le bloc-notes.

1
Vali Ploiesti

La solution PRN ne fonctionne que pour des données simples dans les cellules. Pour moi, elle ne coupe que les 6 premiers signes de la cellule de 200 caractères.

Ce sont les principaux formats de fichier dans Excel 2007-2016, Remarque: Dans Excel pour Mac, les valeurs sont +1.

51 = xlOpenXMLWorkbook (without macro's in 2007-2016, xlsx)
52 = xlOpenXMLWorkbookMacroEnabled (with or without macro's in 2007-2016, xlsm)
50 = xlExcel12 (Excel Binary Workbook in 2007-2016 with or without macro's, xlsb)
56 = xlExcel8 (97-2003 format in Excel 2007-2016, xls)

From XlFileFormat, propriété FileFormat

Gardez à l'esprit les autres FileFormatNumbers pour la méthode SaveAs :

FileExtStr = ".csv": FileFormatNum = 6
FileExtStr = ".txt": FileFormatNum = -4158
FileExtStr = ".prn": FileFormatNum = 36
0
Krzysztof Gapski

La réponse de cette question a fourni la réponse à cette question beaucoup plus simplement.

Write est une instruction spéciale conçue pour générer une lecture par machine les fichiers qui sont ensuite consommés avec Input.

Utilisez Imprimer pour éviter de manipuler les données.

Merci utilisateur GSerg

0
timclancy